gpt4 book ai didi

c - 在 C 中读取巨大的 Txt

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:08 28 4
gpt4 key购买 nike

我想读取一个超过 5.5M 行的文本文件,但是,为了测试建议,我只读取了一个 900 行和 70 列的文本文件并将其存储在 matrix x[1000][100] 中

我这样做是因为我想识别包含日期的文本文件的第 13 列。此外,我会将此文本拆分为包含每天数据的许多其他文本文件。

我将创建另一个具有相同值的文本文件,每次第 13 列更改时,我都会写一条消息说 "NEW DAY"。在此之后,我将使用其他软件跟踪此 "NEW DAY" 并在找到时拆分。

一切正常,直到 385 行,请记住每行大约有 70 列,但是,在这个值之后我不知道为什么文件停止到识别每一行的 13th column 中的变化,并在数字变化时停止写入 "NEW DAY"

数据是这样显示的:

TAM 2000-03-07T16:55    22.78   5.50999 2   110 1   233 2.2 65  0.3 293 0

T 后面的数字是我要跟踪的数字。

代码如下:

int main()
{
long int i = 0;
long int j = 0;
char x[1000][100];
FILE *file = fopen("Entrada.txt", "r");
FILE *file2 = fopen("Saida.txt", "w");

while ((x[i][j] = fgetc(file)) != EOF) {
if(i>=1 && j==70) {
if(x[i][13] != x[i-1][13]) {
for(j=0; j <= 70;j++) {
fprintf(file2, "%c", x[i-1][j]);
printf("%c", x[i-1][j]);
if(j==70){
fprintf(file2, "\n %s \n","New Line");
printf("\n %s \n","New Line");
}
}
} else {
for(j=0; j <= 70 ;j++) {
fprintf(file2, "%c", x[i][j]);
printf("%c", x[i][j]);
if(j==70) {
fprintf(file2, "\n %s \n","");
printf("\n %s \n","");
}
}
}
}

if(x[i][j] =='\n'){
i++;
j=0;
} else {
j++;
}
}

fclose(file2);
return 0;
}

最佳答案

您在问题中声明您需要检查第 13 个字符以查看日期是否已更改,但您似乎只检查了一天中的一位数字。天可以有两位数。

在 C 中,数组索引基于 0,因此根据您的样本输入,它看起来像索引应检查 12 和 13,即第 13 和 14 列。

您不需要存储所有行并进行比较,只需存储更改的信息,即告诉您日期的两个字符。

你可以尝试这样的事情:

char line[100];
char old12 = ' ';
char old13 = ' ';
long row = 0;
while (fgets(line, sizeof(line), file1) != NULL)
{
if (row++>0)
{
if (line[12] != old12 || line[13] != old13)
{
/* remove \n */
char* nl = strchr(line,'\n');
if (nl) *nl = '\0';
fprintf(file2,"%s", line );
fprintf(file2, " New Line\n" );
}
else
{
fprintf(file2,line);
}
}
else
{
fprintf(file2,line);
}
old12 = line[12];
old13 = line[13];
}

如果你正在处理一个大文件,拥有一个大的二维数组肯定会给你带来问题,而是尽量在内存中保留尽可能少的文本。

您没有描述您的数据,但如果数据中存在间隙,您可能需要检查整个日期而不是仅仅检查一天,否则将不会检测到这样的行:

TAM 2000-03-07T16:55    22.78   5.50999 2   110 1   233 2.2 65  0.3 293 0
TAM 2000-04-07T16:55 22.78 5.50999 2 110 1 233 2.2 65 0.3 293 0

关于c - 在 C 中读取巨大的 Txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36735645/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com