当前位置: 首页 > 知识库问答 >
问题:

在特定点读取文件中的行

欧阳狐若
2023-03-14

所以我正在写一个代码来获取scanf一个文本文件并返回一个格式化的文本消息日志。我一直在想,当文件扫描行“332982000 20555552002 205551001 7 Webb先生,我能问你一个问题吗?”时,如何在某一点扫描文件中的字符串,并打印E.X点以外的所有字符串我将前4个数字扫描为整数,并将其余写入的文本扫描到从“Mr.Webb”开始的字符数组中。

我尝试使用一个for循环与fscanf扫描成一个数组,但它不工作。我也在想我可以使用malloc只是为了节省空间,但我不知道该把什么放在大小的争论。任何帮助将非常感谢!

int posix;
int phone1;
int phone2;
int textsize;
int val, val2;
char line[256];
char text[3000];
int len=strlen(line);
int i=0;

printf("\n\nTime                           %s                           %s", argv[2], argv[3]);
printf("\n======================================================================================\n\n\n");

FILE* textfile= fopen(argv[1],"r");

fscanf(textfile, "%d %d %d %d %s", &posix, &phone1, &phone2, &textsize, text);

while( fgets(line, sizeof(line), textfile) ) { 

    val= atoi(argv[2]);
    val2=atoi(argv[3]);

    if ( (val==phone1) && (val2==phone2) ) {
        printf(" %s ", text); //only prints Mr
        text=(char*)malloc(sizeof())//tried malloc but not too sure how to use it correctly
        for (i=0; i<len; i++) { //tried using for loop here didnt work. 
          fscanf("%s", text);
          }

        sortText(phone1, phone2, textsize, text);
        //readableTime(posix);
         }

否则,如果((val2==phone1)

        sortText(phone1, phone2, textsize, text);
        //readableTime(posix);
         }


fscanf(textfile, "%d %d %d %d %s", &posix, &phone1, &phone2, &textsize, text);             

}

fclose(textfile);
return 0;

}

共有1个答案

江煜
2023-03-14

首先,将整个文件读入malloc'd char数组。fseek和ftell为您提供文件大小:

// C99
FILE *fp = fopen("file", "r");
size_t filesize;
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
char *filetext = malloc(filesize + 1);
fread(filetext, 1, filesize, fp);
filetext[filesize] = 0;

然后为一行使用一个缓冲区,该行的大小为整个文件的大小,这样您肯定有足够的大小。sscanf()可用于从字符串中读取内容。

int readbytes;

for(int i=0; i < filesize; i+=readbytes) {
    char line[filesize];
    int posix, phone1, phone2, textsize;

    if(EOF == sscanf(
        &filetext[i], "%d%d%d%d%[^\n]%n", &posix, &phone1,
        &phone2, &textsize, line, &readbytes))
    {
        break;
    }

    printf("%d %d %d %d '%s' %d\n", posix, phone1, phone2, textsize, line, readbytes);
}

格式说明符“%[^\n]”表示:在下一个换行符之前的每个字符。格式说明符“%n”提供了到目前为止通过此sscanf调用读取的字节数,实际上是您的行大小,您可以使用它来推进迭代器

 类似资料:
  • 问题内容: 我不是在谈论特定的行号,因为我正在读取具有相同格式但长度不同的多个文件。 说我有这个文本文件: 我希望你知道我的意思。我正在考虑遍历文件,然后使用正则表达式搜索以找到“开始”和“结束”的行号,然后使用线缓存从开始行读取到结束行。但是如何获得行号?我可以使用什么功能? 问题答案: 如果您只想要和之间的文本块,则可以执行以下操作: 实际上,您不需要操纵行号即可读取开始和结束标记之间的数据。

  • 问题内容: 有什么方法可以从文本文件中读取特定行?在API或Apache Commons中。就像是 : 我同意实现起来很简单,但是特别是当文件很大时,效率不是很高。 问题答案: 可以,但是仍然存在效率问题。 或者,您可以使用: 由于有缓冲,这将稍微更有效。 看一下并尝试跳过整行(使用正则表达式)。我无法确定它是否会更有效- 对其进行基准测试。 PS 代表 效率, 我的意思是 记忆效率

  • 我的Firebase RealtimeDatabase包含一个名为Records在该表中有FirebaseUser Uid,在每个Uid中有日期,在每个日期中有一个产品列表。这是一个来自firebase控制台的示例。 在一个名为DailyTableActivity的活动中,有一个提示到DatePickerDialog的按钮和一个ListView元素,该元素应该为连接的用户显示对话框中特定日期(或当

  • 问题内容: 可以说我在一个文件夹中有三个文件:file9.txt,file10.txt和file11.txt,我想按此特定顺序读取它们。谁能帮我这个? 现在我正在使用代码 它先读取file10.txt,然后读取file11.txt,然后读取file9.txt。 有人可以帮助我如何获得正确的订单吗? 问题答案: 文件系统上的文件未排序。您可以使用函数自己对生成的文件名进行排序: 请注意,您代码中的调

  • 问题内容: 我正在尝试使用php从文本文件中读取特定行。这是文本文件: 我如何使用php获取第二行的内容?这将返回第一行: ..但我需要第二个。 任何帮助将不胜感激 问题答案: 文件—将整个文件读入数组

  • 我正在Java写一个程序来更新文本文档上的数据。更新由按钮(JButton)触发。 特别是,我需要区分文档中的3行: 第一个描述了一个名为“total”的浮点值 第二个描述了一个名为“fail”的浮点值 第三个描述了一个称为“rate”的双值 在程序执行期间,我希望读取文档的3行并将其分配给变量;按下按钮后,相应的变量必须覆盖文档中的值。 为了实现这一点,我的理由如下: 我声明了3个私有变量(总数