我想只读取文件中每行的前五个字符(包括空格)。意思是,在指针到达某一行的第5个字符后,我希望指针然后重置到下一行的开头,并继续这样做,直到它到达EOF
。
例如,如果我想读取文件中每行的前5个字符,则应该产生以下结果:
Hello World ---> Hello
blah blah ---> blah
Goodbye ---> Goodb
我已经尝试通过实现fgets
来实现这一点,但是我无法弄清楚如何在读取5个字符后重置指针:
while (feof(inputFile) == 0) {
fgets(str, 6, inputFile);
发生的事情是fgets
在第5个字符处停止,但不是转到下一行,而是继续读取同一行中接下来的5个字符。
一旦读入5个字符,有没有办法让fgets
从下一行开始?任何未实现fgets
的替代方法也是可以接受的。
答案 0 :(得分:1)
试试这个
void trimFile(const char *inputFile, const char *outputFile, int length) {
FILE *fin, *fout;
fin = fopen(inputFile, "r");
fout = fopen(outputFile, "w");
char str[length + 1];
while (fgets(str, sizeof str, fin)){
char *p = strchr(str, '\n');
if(p){
fputs(str, fout);
} else {
int ch;
while((ch=fgetc(fin))!='\n' && ch != EOF)
;
fprintf(fout, "%s\n", str);
}
}
fclose(fin);
fclose(fout);
}
答案 1 :(得分:1)
fgets(char * str, int num, FILE * f)
读取最多(num-1)个字节并附加终止空字符。
如果你想跳过剩下的行,你的文件是固定的行长,那么你可以
使用fseek ( FILE * f, long int offset, int origin )
将文件索引的位置设置为行尾。
答案 2 :(得分:1)
我也明白了,这有效:
while (feof(fi) == 0) {
fgets(str, 6, fi);
while ((c = getc(fi)) != '\n' && c != EOF) {
;
}
...
从每行读取5个字符,getc
将指针移回下一行的开头。