![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
Perlでテキストデータの集計を行いたいのですが、集計のプログラムが上手く作れずに困っています。
元のテキストとして、
あいうえお。かきくけこ。さしすせそ。たちつてと。あいうえお。
というものがあり、整形プログラムとしては、
while(<>){
s/。/。\n/g;
print"$_";
}
があります。このプログラムを使って、
あいうえお。
かきくけこ。
さしすせそ。
たちつてと。
あいうえお。
という形に整形ところまではできたのですが、上記のプログラムに追加する形で、
あいうえお。 2
かきくけこ。 1
さしすせそ。 1
たちつてと。 1
というように同一の行の集計を行えるようにしたいです。
元のテキストデータから整形と集計を1つのプログラムで行えるようにしたいのですが、どうすれば良いのでしょうか?
No.6ベストアンサー
- 回答日時:
えぇと....
<@data> とか <@out> とかで何をしたいのでしょうか>#4. こんなところでグロブする必要性は見えないのですが....
あと, @ARGV は Perl の変数であって「環境変数」じゃないよ. 環境変数は %ENV からアクセスする.
まあ #3 では変な方向に走ったけど, わかりやすくするなら #2 のように
・「。」で split する
・それぞれの個数をハッシュで数える
・ハッシュのデータを出力する
という方針でいくべきでしょうね.これ全体を while (<>) でくくればほぼんど OK.
ありがとうございます。
教えて頂いた方法で自分が実行したかった作業が行えるようになりました。
perlを始めて間もないので、勉強になりました。
No.5
- 回答日時:
一部訂正
>$ perl split.pl ssample.txt sample2.txt
ではなくて
$ perl count.pl ssample.txt sample2.txt
だね。
![「整形したテキストの行を集計する方法」の回答画像5](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/d/650963_5497e058ce61f/M.jpg)
No.4
- 回答日時:
No.2 ORUKA1951です。
きちんと、希望したいことを書いておかないとダメだよ。
他の可能性も含めて・・
sample.txt____________
あいうえお。かきくけこ。さしすせそ。たちつてと。あいうえお。
かきくけこ。さしすせそ。あいうえお。
らりるれろ
たちつてと。
らりるれろ。
sample2.txt___________
なにぬねの。ぱぴぷぺぽ。
あいうえお。
の複数のファイルがあり、しかも複数行にまたがっている可能性があるとき
・・ただし[。]以外の位置での改行は無いとする。(あれば、改行を取り除いてつないで処理すること)
・・そのかわり、例のように[。]が無くても処理してくれるはず
count.pl
#!/usr/local/bin/perl
@files = @ARGV;
foreach(@ARGV){
open IN,$_ ,or die;
while(<IN>){
@data = split /。/,$_;
while(<@data>){
$check{$_} ++;
if($check{$_}==1){push @out ,"$_";}
}
}
close IN;
}
open OUT ,">out.txt" or die;
while(<@out>){
print OUT "$_。$check{$_}\n";
}
close OUT;
__END__
使い方(Bashより)、Windowsの場合 > かな
$ perl split.pl ssample.txt sample2.txt
と、処理するファイルを幾つでも続けて書く。
[結果]
あいうえお。4
かきくけこ。2
さしすせそ。2
たちつてと。2
らりるれろ。2
なにぬねの。1
ぱぴぷぺぽ。1
★ポイントは、引数は@ARGVという環境変数に格納されるということ。
Bashシェルからの操作だが、Windowsだと一行目はいらないと思う。
ありがとうございます。
今後プログラムを発展させていくことを考えると、非常に参考になる回答を頂けました。
perlの勉強を深め、色々と試してみたいと思います。
No.3
- 回答日時:
や, だから #2 と「標準入力から読み込む」を組合せるだけ, なんだけど.... 基本はハッシュかな? 例えば
my %count;
my @keys;
while (<>) {
chomp;
while (/[^。]*。/g) {
push @keys, $& unless $count{$&}++;
}
}
for my $key (@keys) {
print "$key $count{$key}\n";
}
みたいな感じ?
No.2
- 回答日時:
ごく普通に・・
$line="あいうえお。かきくけこ。さしすせそ。たちつてと。あいうえお。";
split /。/,$line;
while(<@_>){
$check{$_} ++;
if($check{$_}==1){push @out ,"$_";}
}
while(<@out>){
print "$_。$check{$_}\n";
}
この回答への補足
すみません、私としては、
あいうえお。かきくけこ。さしすせそ。たちつてと。あいうえお。
をテキストデータとして保存してある状態で、コマンドプロンプト上で
>perl (整形・集計プログラム).pl (あいうえお…).txt
と入力して、結果を出力できるようにしたいです。
教えていただいたプログラムでも整形と集計は可能なのですが、できればこちらの形で作業を行いたいので、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- 統計学 確率統計の問題です。 3 2022/04/07 04:39
- HTML・CSS GETをPOSTに変更したところ 送信 不能です。 1 2022/04/10 17:31
- その他(健康・美容・ファッション) 耳穴型補聴器(中古品)の再整形 1 2022/06/07 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
指定の行数目から行を抽出する
-
Pythonでテキストを行数指定し...
-
<>で区切られたdatファイルをエ...
-
資格試験に向け、ipodで見れる...
-
整形したテキストの行を集計す...
-
Perl アンド検索
-
***.cgiの中身は第三者から見ら...
-
入出力共用が出来ないんです
-
ダイアモンド演算子<>に対するb...
-
タブの色を変更する方法
-
重複ファイル名ある場合ファイ...
-
Perl初心者です。同一データを...
-
perlのflock関数でロックをかけ...
-
Net::FTPを使いファイル一覧の...
-
perlのエディタでおすすめを教...
-
データファイルからのデータの...
-
HTMLのフォームで画像と文...
-
csvで順番の入れ替え
-
レコードの書込み判断
-
Perlでファイルを読み込みタグ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
Pythonでegrep機能をつかいたい
-
Fortranで1行飛ばして読み込む方法
-
C++でのテキストファイル読み込...
-
C言語初心者です。プログラミン...
-
テキストファイルの各行を配列...
-
ファイルの内容をスカラー変数...
-
shellのコマンド deffの差分の...
-
<>で区切られたdatファイルをエ...
-
perlの引数で複数のファイル処...
-
ifstream/ofstream について
-
Pythonでテキストを行数指定し...
-
「パスが見つかりません」とい...
-
Perl エラーログを指定の場所...
-
perlでCSVをソートする方法につ...
-
文字列操作に関する質問です。
-
perlでIEのクッキーを削除したい
-
連番のファイルを何個も開きたい
-
ファイル名に日付を入れてアッ...
-
一行だけ読込
おすすめ情報