数万のデータをテキストファイルに出力していく時に、縦方向に並べていく方法を教えて下さい。
j = 1;
for(i = 1 ; i < 10 ; i++){
while( j <= 10000){
.....................
....................
j += 1;
}
i = 1の時、While 文が一回実行される毎に"11" or "22" or "33" が順にテキストファイルに出力されるとした場合、改行コードをつけると、
11
22
33
・
・
・
改行コードをつけなければ、
11 22 33 ・・・ですが、複数セットの繰り返し(※iの値の増加)をして、順に出力する事は簡単な事なのですが、(以下のような通常の出力)
(i = 1) 11 22 33 ・・・・・・
(i = 2) 11 22 33 ・・・・・・
(i = 3) 11 22 33 ・・・・・・
・
・
・
今回
(i = 1)(i = 2)(i = 3)(i = 4)・・・・・・
11 11 11 11 ・・・・・・
22 22 22 22 ・・・・・・
33 33 33 33 ・・・・・・
・ ・ ・ ・ ・・・・・・
・ ・ ・ ・ ・・・・・・
というように、出力させるにはどのように考えたら良いでしょうか?
2次元配列は考えたのですが、扱うデータ数を今後 i の値を100以上、jの値を数万~数十万までする予定なので、配列として領域を確保しないように出来れば・・と考えています。
その他の考えとして、i =1 の時のデータを全て初めに
fprintf(fp,"%s \n",s); として改行で出力しておいて、i=2から一行目の一文字ずつ検索して行き、タブもしくは、改行コードを見つけたら、その前にi =2 のときのデータを挿入していくというように考えたのですが、コードとしてどのように記述したらよいか分からなくなっています。
以上のようにしか考えられなくなっています、なにか良いアドバイスや、良い方法を教えて頂けませんか?
どうか宜しくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
★入力用、出力用の2つで処理するのは?
・1つのファイルで読み書き両用でオープンして処理するのは大変なので
入力用と出力用の2つのファイルを読み込み用、書き込み用として使います。
・処理は行単位で取得して末尾に追加したいものを書き出します。
このとき fgets() ではなく fgetc() で改行文字が現れるまで入力して
それをそのまま fputc() で出力へ流します。そして改行文字が見つかったら
新しい文字列を出力へ追加して改行文字も出力します。
これを行単位で繰り返します。
・挿入する方法はデータの移動が大変ですのでこの方法が楽です。
入力用、出力用の2つで処理する方法をお勧めします。
・下にそのサンプルを載せておきます。
サンプル:
FILE *fp; ←読み込み用
FILE *fo; ←書き込み用
int ch, moji;
// 読み書き処理
if ( (fp = fopen("読み込み名","r")) != NULL ){
if ( (fo = fopen("書き込み名","w")) != NULL ){
for ( ; ; ){ ←無限ループ
// 既存の文字列を入力→出力へ
while ( (ch = fgetc(fp)) != EOF ){
if ( ch == '\n' ){
break;
}
if ( isdigit(ch) ){
moji = ch;
}
fputc( ch, fo );
}
if ( ch == EOF ){ ←EOF ならここで抜ける
break;
}
// 追加文字列を出力へ
fputc( moji, fo );
fputc( moji, fo );
fputc( '\n', fo );
}
fclose( fo );
}
fclose( fp );
}
// ここで削除&リネーム
remove( "読み込みファイル名" );
rename( "書き込みファイル名", "読み込みファイル名" );
その他:
・上記のサンプルでは必ず読み込みファイルに1列目のデータがあるという前提です。
よって最初の1列目データは普通にファイルに出力して下さい。ここ要注意。
・あと書き込み用ファイルを次の読み込み用ファイルとするにはファイル名をリネーム
するか、上記の『fclose( fo );』の上に書き込み用のファイルを読み込み用ファイルに
上書き(コピー)する処理を追加します。
・速度面からリネームがお勧めです。
リネームは2つのファイルをクローズしてから削除(remove)して、リネーム(rename)と
順番に行います。
・以上。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Java Java 南京錠 2 2023/02/04 11:46
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Visual Basic(VBA) 【VBA】複数行あるカンマ区切りのデータを全て縦に一列に並べたい 5 2022/04/13 17:03
- その他(プログラミング・Web制作) python コードについて(初学者です) 3 2023/07/20 14:44
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サウンド出力のデバイスを選択...
-
テキストファイルに改行コード...
-
VB.NETでExcelファイルを出力す...
-
二次元配列をクリップボードに...
-
AccessVBA複数レポート条件毎に...
-
CreateProcess関数と実行後の戻...
-
VC++でUTF-8のファイルを出力し...
-
Acccess レポートをグループ別...
-
カスタマバーコードの印刷
-
シェルコマンドの 2>&1 とはど...
-
ファイル形式またはファイル拡...
-
ファイル出力の場所を指定
-
setvbufってどう使うの?
-
gnuplotでreplotできない??
-
プリンタに出力する信号をパソ...
-
stdin,stdoutについて
-
C言語での印刷方法
-
C言語でBMP画像(ファイル)は...
-
UNIX & Linux の標準出力で得た...
-
コマンド(例えばls)の出力結果...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド(例えばls)の出力結果...
-
Acccess レポートをグループ別...
-
VC++でUTF-8のファイルを出力し...
-
サウンド出力のデバイスを選択...
-
ファイルの文字コードをUTF-8に...
-
VBA でメモ帳へ保存する際の保...
-
ファイル出力の場所を指定
-
ファイル形式またはファイル拡...
-
テキストファイルに改行コード...
-
シェルコマンドの 2>&1 とはど...
-
Wordマクロで指定したフォルダ...
-
AccessVBA複数レポート条件毎に...
-
二次元配列をクリップボードに...
-
UNIX & Linux の標準出力で得た...
-
フォルダにあるPDF情報の抽出(VBA)
-
C++ BuilderでPDF出力
-
VBSでEXCEL⇒CSV変換で日付の書...
-
fortranのtxtファイル出力書式...
-
CBool関数について VB6とVB.net...
-
ワードからPDF変換でグラフが表...
おすすめ情報