- 締切済み
テキストファイルの文字操作の仕方
下記の[元データ]ようなテキストファイルのデータをCSV形式の データとして取り扱いたいのですが、[処理後]のように 変換する良い方法はないでしょうか? 何らかしらのプログラミングが必要になるかと思いますが ご教授いただければ幸いです。 どうかよろしくお願い致します。 [元データ] 出身地:東京 名前:山田太郎 性別:男 年齢:26歳 生年月日:1976年1月1日 出身校:東京大学 住所:東京都杉並区 電話:03-0000-0000 FAX:03-0000-0001 出身地:埼玉 名前:鈴木一郎 性別:男・・・・(以下同様) [処理後] 東京,山田太郎,男,26歳,1976年1月1日,東京大学,東京都杉並区,03-0000-0000,03-0000-0001 埼玉,鈴木一郎,・・・
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- nightowl
- ベストアンサー率44% (490/1101)
Ruby の Windows バイナリのダウンロードは以下から行ってください。 「最新Release版」と書かれた zip ファイルをお好きなフォルダに展開すればいいでしょう。 あとは PATH をそこに通せばどこでも Ruby が使えます。 先ほどの実行例ですが、UNIX(Linux)だったら -Ks オプションを -Ke に変えてください。 また結果は標準出力に出されますから、ファイルにリダイレクトするときは ruby -Ks parse_csv.rb address > address.csv のようにすればOKです。
- nightowl
- ベストアンサー率44% (490/1101)
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/
- liar_adan
- ベストアンサー率48% (730/1515)
この手のものには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 で動くと思います。 ただ、データファイル中の「全角空白」はエディタの 置換機能などで半角空白に直しておいてください。 また、使われている「:」が全角と半角が混在している場合も直してください。
- imogasi
- ベストアンサー率27% (4737/17070)
#1のご回答のようにするには 「出身地:」を「なし」(変換後になにも入れない)に 「改行+名前:」を「,」に 「スペース+性別:」を「,」に (一部略) 「スペース+生年月日:」を「,」に 「改行+出身校:」を「,」に置換すれば良いとおもいます。 ただし「改行」を文字で表す仕組みを備えたテキストエディタがあることが必要です。メモ帳やエクセルやワード(パッド)ではだめでしょう。 むしろVBAで「名前:」とかの項目名か「:」を探し、次ぎに来るスペースかまたは改行までをその項目内容とする、組みなおしプログラムを作成すべきではと思います。
- the845t
- ベストアンサー率33% (246/743)
「\n名前」を「,名前」に置換 「\n出身校」を「,出身校」に置換 「\n電話」を「,電話」に置換 「 」を「,」に置換 で、いかがですか? プログラムじゃなく、テキストエディタの置換機能ですが。 最後の「 」の置換は、空白が文中に他に無いことが前提