0

Cのファイルから行を読み取りたい.たとえば、ファイルには次のデータがあります

"It was a good

day

but suddenly
everything"

現在、私のコードは行ごとに読み取るだけですが、上記の例で述べたように、開始の逆コンマ (") から終了の逆コンマ (") までデータを読み取り、その文字列全体を書き込みます ("It was a good day" のように)。しかし突然すべて") 別のファイルに。これらの上記の行を、逆コンマの開始から逆コンマの終了まで読むのに助けが必要なだけです。それを行うのに役立つ C の関数を教えてください。

今、私はデータを1行ずつ読んでいます

FILE *file = fopen ( filename, "r" );

 if (file != NULL )
  {
   char line [1000];
   while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */
    {
    //do something
     }
    }
4

4 に答える 4

3
#include <stdio.h>

char *read_quoted_string(char outbuff[], FILE *fp){
    int ch, i;
    while(EOF!=(ch=fgetc(fp)))
        if(ch == '"') break;

    for(i=0;EOF!=(ch=fgetc(fp));++i){
        if(ch == '"') break;
        outbuff[i] = ch;
    }
    outbuff[i]='\0';
    return outbuff;
}

int main(void){
    FILE *file = fopen("data.txt", "r" );

    if (file != NULL ){
        char buff [1000];
        printf("%s", read_quoted_string(buff, file));

        fclose(file);
    }
    return 0;
}

また繰り返す

    if (file != NULL ){
        int i=1;//sequence number
        char buff [1000];
        while(*read_quoted_string(buff, file)){//empty is "" (*"" == '\0')
            printf("%2d:%s\n", i++, buff);
        }
        fclose(file);
    }
于 2013-06-12T18:44:52.127 に答える
2

fgetcを使用して、一度に 1 文字ずつ読み取ることができます。

  • 十分な大きさのバッファを割り当てます
  • ファイル char から char ごとに読み取りを開始します
  • "次の文字をバッファに保存する開始を見つけた場合
  • 他に到達するまでバッファに保存し続けます"
  • あなたの文字列を'\0'
  • "新しい行を削除し、同じ行の 2 つの間のすべての文字を含める必要がある場合は、保存'\r'せず、代わりに'\r'単純なスペースを保存してください。' '
  • ホール ファイルを消費するまで繰り返します。つまり、fgetcreturnEOFです。
于 2013-06-12T18:46:18.133 に答える
1

これを行うには、次のコードを使用できます。

#include <stdio.h>

void copyToAnother(FILE *inFile, FILE *outFile)
{
    int ch, flag = 0;
    while(EOF!=(ch=fgetc(inFile)))
   {
        if(ch != '"' && toggle)
        {
          fputc(ch,outFile);
        }
        else
        {
           toggle = toggle ^ 1;
        }
}

int main(void)
{
    FILE *inFile  = fopen("in.txt", "r" );
    FILE *outFile = fopen("out.txt", "w" );

    if (inFile != NULL && outFile != NULL)
    {
        copyToAnother(inFile, outFile);
        fclose(inFile);
        fclose(outFile);
    }
    return 0;
}

:このコードでは。すべての " " の間にすべてのデータを書き込みます。

于 2013-06-12T19:04:52.940 に答える
0

「strcat」を使用して、文字の配列を連結できます。良い例については、その投稿を参照してください: How do I concatenate const/literal strings in C? .

于 2013-06-12T18:38:51.053 に答える