こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

テキストファイルの文字操作の仕方

下記の[元データ]ようなテキストファイルのデータをCSV形式の
データとして取り扱いたいのですが、[処理後]のように
変換する良い方法はないでしょうか?
何らかしらのプログラミングが必要になるかと思いますが
ご教授いただければ幸いです。
どうかよろしくお願い致します。



[元データ]
出身地:東京
名前:山田太郎 性別:男 年齢:26歳 生年月日:1976年1月1日
出身校:東京大学 住所:東京都杉並区
電話:03-0000-0000 FAX:03-0000-0001

出身地:埼玉
名前:鈴木一郎 性別:男・・・・(以下同様)



[処理後]
東京,山田太郎,男,26歳,1976年1月1日,東京大学,東京都杉並区,03-0000-0000,03-0000-0001
埼玉,鈴木一郎,・・・

投稿日時 - 2003-04-16 05:37:41

QNo.524001

困ってます

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

Ruby の Windows バイナリのダウンロードは以下から行ってください。
「最新Release版」と書かれた zip ファイルをお好きなフォルダに展開すればいいでしょう。
あとは PATH をそこに通せばどこでも Ruby が使えます。

先ほどの実行例ですが、UNIX(Linux)だったら -Ks オプションを -Ke に変えてください。
また結果は標準出力に出されますから、ファイルにリダイレクトするときは

ruby -Ks parse_csv.rb address > address.csv
のようにすればOKです。

参考URL:http://www.dm4lab.to/~usa/ruby/

投稿日時 - 2003-04-17 11:18:57

ANo.4

AWK ももちろん結構です。でも Perl や Python, Ruby といった
モダンなスクリプト言語だったらもっと柔軟に書けます。
中でも、私が愛用しているオブジェクト指向スクリプト言語 Ruby ではこう書けます。

スクリプトファイル "parse_csv.rb" の中身
data = ARGF.readlines("\n\n")
data.each do |person|
person.gsub!(/[  \n]/,'') # []の中身は半角スペース、全角スペース、"\n"
puts person.scan(/出身地:(.+)名前:(.+)性別:(.+)年齢:(.+)生年月日:(.+)出身校:(.+)住所:(.+)電話:(.+)FAX:(.+)/m).join(',')
end

住所録ファイルを "address" と呼ぶことにして、
これを以下のように実行します。
ruby -Ks parse_csv.rb address
(-Ks は Windows 環境でつけると吉)

参考URL:http://www.ruby-lang.org/ja/

投稿日時 - 2003-04-17 10:57:51

ANo.3

この手のものにはAWKがぴったりなんだがなーと思って、
書いてみました。
一応動くと思います。
------------------------
BEGIN{
RS = "";
}
{
syussinti = "";
namae = "";
seibetu = "";
nenrei = "";
seinengappi = "";
syussinkou = "";
juusyo = "";
denwa = "";
fax = "";
for(i = 1; i<=NF; i++){
if(sub("出身地:", "", $i))syussinti = $i;
else if(sub("名前:", "", $i))namae = $i;
else if(sub("性別:", "", $i))seibetu = $i;
else if(sub("年齢:", "", $i))nenrei = $i;
else if(sub("生年月日:", "", $i))seinengappi = $i;
else if(sub("出身校:", "", $i))syussinkou = $i;
else if(sub("住所:", "", $i))juusyo = $i;
else if(sub("電話:", "", $i))denwa = $i;
else if(sub("FAX:", "", $i))fax = $i;
}
printf syussinti "," namae "," seibetu "," nenrei "," seinengappi ",";
printf syussinkou "," juusyo "," denwa "," fax "\n";
}
------------------------

下のサイトでgawkを拾ってきて、
上のを切り取ってコピーしたファイルをa,データファイルをbとすれば、
>gawk -f a b
で動くと思います。
ただ、データファイル中の「全角空白」はエディタの
置換機能などで半角空白に直しておいてください。
また、使われている「:」が全角と半角が混在している場合も直してください。

参考URL:http://www.vector.co.jp/soft/dl/win95/util/se015007.html

投稿日時 - 2003-04-17 00:31:31

ANo.2

#1のご回答のようにするには
「出身地:」を「なし」(変換後になにも入れない)に
「改行+名前:」を「,」に
「スペース+性別:」を「,」に
(一部略)
「スペース+生年月日:」を「,」に
「改行+出身校:」を「,」に置換すれば良いとおもいます。
ただし「改行」を文字で表す仕組みを備えたテキストエディタがあることが必要です。メモ帳やエクセルやワード(パッド)ではだめでしょう。
むしろVBAで「名前:」とかの項目名か「:」を探し、次ぎに来るスペースかまたは改行までをその項目内容とする、組みなおしプログラムを作成すべきではと思います。

投稿日時 - 2003-04-16 22:31:54

ANo.1

「\n名前」を「,名前」に置換
「\n出身校」を「,出身校」に置換
「\n電話」を「,電話」に置換
「 」を「,」に置換
で、いかがですか?

プログラムじゃなく、テキストエディタの置換機能ですが。
最後の「 」の置換は、空白が文中に他に無いことが前提

投稿日時 - 2003-04-16 08:03:11

あなたにオススメの質問