我想从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
}
}
答案 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一次读取一个字符:
"
开始将下一个字符保存到缓冲区"
'\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?。