すみません。C言語はかじり程度にしかやったことがないのですが協力ください。
現在300行を超えるテキストファイルが14つありそれらをある変換をしたいです。
変換というのは たとえばテキストAがありその中身は
AAAAA
BBBBB
CCCCC
DDDDD
EEEEE
FFFFF
だとします。
それをC言語で作ったプログラムをコマンドプロンプトを使って
BBBBB
AAAAA
DDDDD
CCCCC
FFFFF
EEEEE
という風に行を2行の中で入れ替えるプログラムは作れると思うんです。しかし、かじり程度にしかやったことのない私にとってはまだどのようにすればいいかわかりません。また、結構緊急なんでそのプログラムが組めるようになるころには手遅れになってしまします。これから、もっと勉強はしますが今回はどなたかこの変換が可能なプログラムを教えてはいただけないでしょうか?
ご協力ください
- bitter_fox
- 記事: 607
- 登録日時: 13年前
- 住所: 大阪府
Re: ご協力ください
これは課題でしょうか?pands さんが書きました: という風に行を2行の中で入れ替えるプログラムは作れると思うんです。しかし、かじり程度にしかやったことのない私にとってはまだどのようにすればいいかわかりません。また、結構緊急なんでそのプログラムが組めるようになるころには手遅れになってしまします。これから、もっと勉強はしますが今回はどなたかこの変換が可能なプログラムを教えてはいただけないでしょうか?
フォーラムルールでは課題の丸投げは禁止されていますので、そこの確認をさせてください。
- MoNoQLoREATOR
- 記事: 284
- 登録日時: 13年前
- 住所: 東京
Re: ご協力ください
ファイル内容を全て読み込んで改行で分割して配列変数に格納する。
↓
1→0→3→2→5→4→7→6→9→8・・・という順で新しいファイルに書き込む
という方針が一番簡単だと思います。
for(int i=0;i<繰り返し回数;i++) fputs(fp, hennsuu[i+1-2*(i%2)]);
改行とかを入れる処理は自分で考えてください。
↓
1→0→3→2→5→4→7→6→9→8・・・という順で新しいファイルに書き込む
という方針が一番簡単だと思います。
for(int i=0;i<繰り返し回数;i++) fputs(fp, hennsuu[i+1-2*(i%2)]);
改行とかを入れる処理は自分で考えてください。
Re: ご協力ください
全部読み込むということは300行を超えるという可変の行数を管理することになります。MoNoQLoREATOR さんが書きました:ファイル内容を全て読み込んで改行で分割して配列変数に格納する。
2行ごとに読み込み、行を入れ替えて書き込むほうが簡単でしょう。
それでも1行の文字数が可変個なので、最大文字数を検討しておくことが必要でしょう。
#include <stdio.h>
const size_t max_sting_length = 128; // 一行の最大文字数
int main()
{
int result(0);
FILE* in_file = fopen("input.txt","r"); // 読み込みファイル
FILE* out_file = fopen("output.txt","w"); // 書き込みファイル
if (in_file && out_file)
{
char string1[max_sting_length], string2[max_sting_length];
while (feof(in_file)) // 入力ファイルの終端まで
{
fgets(string1, sizeof(string1), in_file);
fgets(string2, sizeof(string2), in_file);
fputs(string2, out_file);
fputs(string1, out_file);
}
fclose(in_file);
fclose(out_file);
} else result = -1;
return result;
}
(たとえば一行の文字数が128以上だったら、行数が奇数だったら、ファイル名を間違っていたら、
ディスク装置にファイルを書き込む容量がなかったら、等々)
動作確認まではしていないのでアシカラズ。
読み込んだファイルに上書きするのであれば、一旦全部読み込んでから書き込むこともありでしょう。
その場合(同じファイルに上書き)でも一旦別のファイルに書き込んで、元ファイルを削除、作ったファイルを
リネームを行う手があります。