Perlにお詳しい方お願いします。
以下のような買い物リスト(商品名でソートされています)を
バナナ Aさん
バナナ Bさん
バナナ Cさん
ブドウ Aさん
ブドウ Cさん
リンゴ Aさん
リンゴ Bさん
以下のように横並びにしたいです。
バナナ Aさん・Bさん・Cさん
ブドウ Aさん・Cさん
リンゴ Aさん・Bさん
splitで商品名と依頼主を分けて、商品名が1つ上の列と
同じだったら行の最後に追加をします方法にしたいと
思っていますけれど、現在考えています方法ですと、
(1つ上の列と比較しています為に)2名までしか対応が
出来ませんで、A~Cさんの3名の対応が出来ません。
依頼主何名でもOKという具合でプログラムを作りたい
ですので、お詳しい方よろしくお願いします。
No.3ベストアンサー
- 回答日時:
以下のスクリプトを作成してください。
sample.plとします。perl sample.pl 買い物リストのファイル名
とすると、結果が画面に表示されます。
買い物リストの区切り文字は全角の空白1個を前提に作成しています。必要であれば、splitの箇所を修正して下さい。
--------------------------------------
$fname = $ARGV[0];
open(INF,$fname) or die "open error";
%hash_name = ();
while(<INF>){
chomp $_;
($name,$cust) = split(' ',$_);
if (exists $hash_name{$name}){
$hash_name{$name} = $hash_name{$name} . '・' . $cust;
}else{
$hash_name{$name} = $cust;
}
}
close(INF);
foreach $key (keys %hash_name){
print "$key $hash_name{$key}\n";
}
----------------------------------
以下、実行結果
perl sample.pl goo2.txt
バナナ Aさん・Bさん・Cさん
リンゴ Aさん・Bさん
ブドウ Aさん・Cさん
ありがとうございます。
コマンドラインからではありませんで、Windows上で.plファイルを
ダブルクリックして特定ファイルへ出力します方法へと若干変更を
いたしましたが、スゴイです。出来ました!
No.2
- 回答日時:
適切にプログラムが組まれていれば「1つ上の列と比較」すれば「2名までしか対応が出来ません」ということにはならないはずなんだけどなぁ.
まあ困ったらハッシュでなんとかすればいいんだけど.
ありがとうございます。
foreach文の中で
$key_1行上の処理
$key_現在行の処理
その他
$key_1行上 = $key_現在行を代入
というイメージで1行バッファにして使います方法しか分かりませんで
(独学の素人ですので)
ハッシュがチンプンカンプンでして…
勉強不足痛感します…
No.1
- 回答日時:
補足要求です。
1.買い物リスト(商品名でソートされています)は、テキストファイルですか。
2.商品名と依頼主は半角の空白1個で区切られていますか。
3.出力結果も空白1個で区切って、商品名と依頼主(複数の依頼主を全角の「・」で連結したもの)を出力すれば良いのですか。
3.データが
バナナ Aさん
バナナ Aさん
のように、同じ商品かつ同じ依頼主のデータが複数そんざいするようなケースは考えなくてよいですか。
複数あると
バナナ Aさん・Aさん
のように出力されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 1 2022/06/18 21:20
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
- Visual Basic(VBA) vbaマクロについて 【1.csv】をもとに【商品.csv】に有るものを【有り.csv】として名前を 1 2023/05/18 07:58
- その他(Microsoft Office) 同じ番号に並び替え 1 2022/10/21 22:37
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- 呼吸器・消化器・循環器の病気 胃腸不良が酷くまともな食事が摂れていません。 医者から消化の良い食事をと言われて、男の一人暮らしで料 10 2022/11/23 09:55
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Excel(エクセル) エクセル関数について 2 2022/04/13 18:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
高速に文字列の比較
-
連番ごとに印をつける
-
C言語について。
-
VBAでの一時停止と再開の方法
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
どなたかこのプログラミングを...
-
二次元配列のインデックスについて
-
perlでファイルの拡張子を除い...
-
perlで配列の要素が空なのを知...
-
文字列を変数名として扱う方法
-
Javaでゲーム
-
イベントの発生を待つ
-
Strawberry Perl for Windows ...
-
テキストボックスの名前に変数...
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
ハッシュ検索はなぜ速い
-
モンテカルロ法
-
VBAで3秒だけ時間を止めたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について。
-
高速に文字列の比較
-
二つの変数が同じ物を指すよう...
-
@{$protocol_name}
-
CGFloatとは?
-
perlでの平均計算について
-
HTML::Templateのループと配列...
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
VBのReturnの使い方
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
VBAのautofilter、criteriaの配...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
おすすめ情報
tatsu99さん、
ありがとうございます。
補足書かせていただきます
1.買い物リスト(商品名でソートされています)は、テキストファイルですか。
→テキストファイルです。そのファイルをPerl内でOPENしようとしております
2.商品名と依頼主は半角の空白1個で区切られていますか。
→現在は商品名と依頼主は『全角スペース1個』で区切られておりますが、
半角スペースでも大丈夫です。
※区切り文字は連続しました複数スペースではありませんで、半角or全角の
スペース1個です
3.出力結果も空白1個で区切って、商品名と依頼主(複数の依頼主を全角の「・」で連結したもの)を出力すれば良いのですか。
→ありがとうございます。そのようにしたいです
また、申し訳ございません。データはソートの前にuniq処理をかけており
まして、『バナナ Aさん』は1回しか登場しませんです。