簡體   English   中英

C-從文本文件的每一行中讀取特定數量的單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM