人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlを使って文字処理をしたいと思っています。

aaabbbc dddeeefff
などのスペースが含まれている文字の左から○文字までを連続して繰り返し、1行分のデータをカンマ区切りで保存する、これを最終行まで繰り返すシンプルなプログラムがどこかにないでしょうか?

●質問者: clinejp
●カテゴリ:ウェブ制作
✍キーワード:Perl シンプル データ プログラム 連続
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Iwa
●30ポイント

> スペースが含まれている文字の左から○文字までを連続して繰り返し

これの意味がよくわかりません。

また、どこを境にカンマで区切るんでしょうか?(スペースでしょうか?)


2 ● SigZ
●30ポイント

回答がつかないようなので、awkで代案。UNIX系の環境なら普通にawkが使えると思います。

問いがあいまいなところがあるので、求めている答えを以下のように設定します。例えば

aaabbbccc dddeeefff ggghhhiii

jjjkkklll mmmnnnooo

pppqqqrrr ssstttuuu vvvwwwxxx yyyzzz

のようにスペースで区切られた文字列を複数行持ったテキストデータ data.txt があるとします。

1行1レコード、スペースで区切られた文字列を1フィールドとして、各行のフィールド数は一定ではありません。

このデータから各フィールドの左から 3文字目までを切り出し、フィールドの区切りを ”,” にして出力するものとします。

scriptの名前を cut_field.awk とします。

#---from----

BEGIN{OFS=”,”}

{

for(i=1; i<=NF; i++} $i=substr($i, 1, 3)

print $0;

}

#---end----

切り出す文字数が n文字目の場合は $i=substr($i, 1, n) になります。

コマンドラインから

~$ awk -f cut_field.awk data.txt <Enter>

で求めている文字列が表示されます。ファイルに落としたい場合は

~$ awk -f cut_field.awk data.txt > result.txt <Enter>

としてやればよいでしょう。

Perlじゃなくて申し訳ありませんが、awk と Ruby は好きなんですけど Perl が嫌いなもので :-)

私の設問自体があっているなら、誰か Perl での答えを書いてくれるかもしれません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ