[英]C- read a specific number of words from every line in a text file
我只想讀取文件(包括空格)中每行的前五個字符。 意思是,在指針到達某一行的第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
替代方法。
嘗試這個
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);
}
fgets(char * str, int num, FILE * f)
讀取最多(num-1)個字節,並附加一個終止的空char。
如果要跳過該行的其余部分,並且文件具有固定的行長,則可以使用fseek ( FILE * f, long int offset, int origin )
將filepointer的位置設置為行的末尾。
我也想通了,這行得通:
while (feof(fi) == 0) {
fgets(str, 6, fi);
while ((c = getc(fi)) != '\n' && c != EOF) {
;
}
...
這將從每一行讀取5個字符, getc
將指針移回到下一行的開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.