ページ 11

ご協力ください

Posted: 2011年4月09日(土) 00:05
by pands
すみません。C言語はかじり程度にしかやったことがないのですが協力ください。

現在300行を超えるテキストファイルが14つありそれらをある変換をしたいです。

変換というのは たとえばテキストAがありその中身は

AAAAA
BBBBB
CCCCC
DDDDD
EEEEE
FFFFF

だとします。

それをC言語で作ったプログラムをコマンドプロンプトを使って

BBBBB
AAAAA
DDDDD
CCCCC
FFFFF
EEEEE

という風に行を2行の中で入れ替えるプログラムは作れると思うんです。しかし、かじり程度にしかやったことのない私にとってはまだどのようにすればいいかわかりません。また、結構緊急なんでそのプログラムが組めるようになるころには手遅れになってしまします。これから、もっと勉強はしますが今回はどなたかこの変換が可能なプログラムを教えてはいただけないでしょうか?

Re: ご協力ください

Posted: 2011年4月09日(土) 01:27
by bitter_fox
pands さんが書きました: という風に行を2行の中で入れ替えるプログラムは作れると思うんです。しかし、かじり程度にしかやったことのない私にとってはまだどのようにすればいいかわかりません。また、結構緊急なんでそのプログラムが組めるようになるころには手遅れになってしまします。これから、もっと勉強はしますが今回はどなたかこの変換が可能なプログラムを教えてはいただけないでしょうか?
これは課題でしょうか?
フォーラムルールでは課題の丸投げは禁止されていますので、そこの確認をさせてください。

Re: ご協力ください

Posted: 2011年4月09日(土) 12:11
by MoNoQLoREATOR
ファイル内容を全て読み込んで改行で分割して配列変数に格納する。

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: ご協力ください

Posted: 2011年4月09日(土) 12:55
by maru
MoNoQLoREATOR さんが書きました:ファイル内容を全て読み込んで改行で分割して配列変数に格納する。
全部読み込むということは300行を超えるという可変の行数を管理することになります。
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以上だったら、行数が奇数だったら、ファイル名を間違っていたら、
ディスク装置にファイルを書き込む容量がなかったら、等々)
動作確認まではしていないのでアシカラズ。

読み込んだファイルに上書きするのであれば、一旦全部読み込んでから書き込むこともありでしょう。
その場合(同じファイルに上書き)でも一旦別のファイルに書き込んで、元ファイルを削除、作ったファイルを
リネームを行う手があります。