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


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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/10/31 00:09:30
  • 終了:--

回答(2件)

id:Iwa No.1

Iwa回答回数120ベストアンサー獲得回数62004/10/31 03:53:18

ポイント30pt

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

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

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

id:SigZ No.2

SigZ回答回数29ベストアンサー獲得回数02004/11/02 20:38:34

ポイント30pt

回答がつかないようなので、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 での答えを書いてくれるかもしれません。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません