【发布时间】:2016-04-20 06:36:23
【问题描述】:
我想读取一个行数超过 5.5M 的文本文件,但是,对于测试建议,我只读取了一个 900 行和 70 列的文件并将其存储在 matrix x[1000][100] 中。
我这样做是因为我想识别包含日期的文本文件的第 13 列。此外,我会将这些文本拆分为许多其他包含每天数据的文本文件。
我将创建另一个具有相同值的文本文件,每次第 13 列更改时,我都会写一条消息说"NEW DAY"。之后,我会使用其他软件来追踪这个"NEW DAY",并在找到时进行拆分。
在line 385 之前一切正常,记住每行大约有70 columns,但是,在这个值之后,我不知道为什么文件停止识别每行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;
}
【问题讨论】:
-
是否有理由将所有行存储在一个数组中?什么时候不只是逐行处理文件?
-
我不知道如何逐行存储。对我来说,我只需要将一行与之前的行进行比较,然后将这些内容写入另一个文本文件中。关于动态内存分配,好吧,很抱歉,但我不知道应该在哪里使用它。我的意思是,我应该用它来创建一个更大的矩阵?因为我可以读取整个矩阵,所以问题是它会停止验证列。
-
忘记我的第一条评论(我刚刚删除了它)。您的程序非常复杂,只需使用
fgets逐行读取文件,并在读取时处理这些行。您不需要将所有内容存储在数组中。 -
谢谢你,Michael,我现在就试试。真的谢谢你!