文件从C中读取一个特定字符到另一个特定字符

时间:2013-06-12 18:32:00

标签: c string file-io

我想从C中的文件中读取一行。例如,在文件中我有以下数据

"It was a good

day

but suddenly
everything"

Rightnow,我的代码只是逐行读取,但正如上面的例子中所提到的,我想从起始的引号(")中读取数据,直到结束的引号(")然后写出整个string(比如"这是一个美好的一天,但突然之间的一切")到另一个文件中。我只需要帮助阅读以上几行,从开始引号到结尾引号。请指导我C中的哪些功能可以帮助我做到这一点。

当然,我只是逐行阅读数据

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 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:2)

您可能希望使用fgetc一次读取一个字符:

  • 分配足够大的缓冲区
  • 从char
  • 开始读取文件char
  • 如果您发现"开始将下一个字符保存到缓冲区
  • 继续保存到缓冲区中,直至到达其他"
  • 使用'\0'
  • 终止您的字符串
  • 如果您需要删除新行并在同一行中的两个"之间包含所有字符,则只需保存'\r''\r'并保存一个简单空格{{1而不是。
  • 重复直到您使用了孔文件,即' '返回fgetc

答案 2 :(得分: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;
}

注意:在此代码中。它会在所有“”之间写下所有数据。

答案 3 :(得分:0)

你可以使用'strcat'连接你的chars数组。请查看该帖子以获得一个好例子:How do I concatenate const/literal strings in C?