5.5Mを超えるテキストファイルを読みたいのですが、テスト提案のために900行と70列のファイルを読み込んでmatrix x[1000][100]
に保存しました。Cで巨大なTxtを読む
私はこの日の番号を含むテキストファイルの13番目の列を認識したいので、これをやります。さらに、このテキストを、毎日のデータを含む他の多くのテキストファイルに分割します。
同じ値を持つ別のテキストファイルを作成し、13番目の列が変わるたびに、"NEW DAY"
というメッセージを書きます。その後、他のソフトウェアを使用してこの"NEW DAY"
を追跡し、見つかったら分割します。
すべてがファイルが各行の13th column
に変更を認識するために停止した理由をただし、この値の後に、私が知らないだけ"NEW DAY"
ときに書き込みを停止、各行約70 columns
を持っていることを覚えて、line 385
までうまく機能しています番号が変わります。
データがこのように示されています:
Tの背後にある数は、私が追跡したいものですTAM 2000-03-07T16:55 22.78 5.50999 2 110 1 233 2.2 65 0.3 293 0
。ここで
はコードです: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'を使って行ごとにファイルを読んで、それらを読むときに行を処理します。すべてを配列に格納する必要はありません。 –