ご協力ください

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
pands

ご協力ください

#1

投稿記事 by pands » 9年前

すみません。C言語はかじり程度にしかやったことがないのですが協力ください。

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

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

AAAAA
BBBBB
CCCCC
DDDDD
EEEEE
FFFFF

だとします。

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

BBBBB
AAAAA
DDDDD
CCCCC
FFFFF
EEEEE

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

アバター
bitter_fox
記事: 607
登録日時: 9年前
住所: 大阪府

Re: ご協力ください

#2

投稿記事 by bitter_fox » 9年前

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

アバター
MoNoQLoREATOR
記事: 284
登録日時: 9年前
住所: 東京

Re: ご協力ください

#3

投稿記事 by MoNoQLoREATOR » 9年前

ファイル内容を全て読み込んで改行で分割して配列変数に格納する。

1→0→3→2→5→4→7→6→9→8・・・という順で新しいファイルに書き込む

という方針が一番簡単だと思います。

for(int i=0;i<繰り返し回数;i++) fputs(fp, hennsuu[i+1-2*(i%2)]);

改行とかを入れる処理は自分で考えてください。

maru
記事: 150
登録日時: 9年前

Re: ご協力ください

#4

投稿記事 by maru » 9年前

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以上だったら、行数が奇数だったら、ファイル名を間違っていたら、
ディスク装置にファイルを書き込む容量がなかったら、等々)
動作確認まではしていないのでアシカラズ。

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

閉鎖

“C言語何でも質問掲示板” へ戻る