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ランキング
-
INDIRECT 横に再度抽出したい
-
Perlで、「が」を、「...
-
このファイルを開く方法で困っ...
-
perlのflock関数でロックをかけ...
-
perl 正規表現でエラー
-
P.Cのシングルチューナーとダブ...
-
perl LWPでURLにアクセスした時...
-
PerlでUTF-8のファイルの文字列...
-
AI sisterとは、偽物の人ですか?
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
Perlで特定文字列から特定文字...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if($key){ ($key eq 'aaa') ||...
-
双方向リスト(?)
-
HTML::TemplateのTMPL_LOOPにつ...
-
連番ごとに印をつける
-
変数に何も入ってないとき
-
Perlのリファレンスについて
-
ハッシュを無名変数へ代入して...
-
VB6の公式リファレンスはありま...
-
bashのリファレンス的なWEB...
-
DBIを使用してデータを連想配列...
-
重複する値を表示しない
-
クラスの作り方
-
Perl構造体、出力方法
-
ハッシュの配列を作ることは可...
-
Yahooの掲示板のような掲示板を...
-
ファイルからデータを読み込ん...
-
Perlで縦横変換のような事をし...
-
サブルーチンの返値に配列のハ...
-
構造体の配列の指定方法
-
C言語について。
おすすめ情報
tatsu99さん、
ありがとうございます。
補足書かせていただきます
1.買い物リスト(商品名でソートされています)は、テキストファイルですか。
→テキストファイルです。そのファイルをPerl内でOPENしようとしております
2.商品名と依頼主は半角の空白1個で区切られていますか。
→現在は商品名と依頼主は『全角スペース1個』で区切られておりますが、
半角スペースでも大丈夫です。
※区切り文字は連続しました複数スペースではありませんで、半角or全角の
スペース1個です
3.出力結果も空白1個で区切って、商品名と依頼主(複数の依頼主を全角の「・」で連結したもの)を出力すれば良いのですか。
→ありがとうございます。そのようにしたいです
また、申し訳ございません。データはソートの前にuniq処理をかけており
まして、『バナナ Aさん』は1回しか登場しませんです。