こんばんは。
色々試してみたのですが、どうしてもうまくいかないので質問させてください。
リストの$f1とファイルの$aaがマッチして、
かつリストの$f3とファイルの$bbがマッチした場合に、
$f4を付け加えてprintしたいのですが、
★マークの処理で、リストの$f3とファイルの$bbがマッチしていないものまで
printされてしまうことがあります。
$aaとマッチするものがリストに2つ以上ある時にこの現象がおきるようなのですが、
どの辺を直したらよいのかわかりません。
definedの使い方がおかしいのでしょうか?
見よう見まねで書いたので、▲マークあたりの指定も自信がありません。
#リスト読み込み
open LIST, "./list" or die;
while (<LIST>) {
chomp;
if (/(.*) (.*) (.*) (.*)/) {
$f1 = $1;
$f2 = $2;
$f3 = $3;
$f4 = $4;
}
$xx{$f1} = $f4; #▲
$yy{$f1} = $f3; #▲
}
close LIST;
#ファイル読み込み
if ($#ARGV >= 0) {
@files = @ARGV;
}
foreach $file (@files) {
open FILE, $file;
while (<FILE>) {
chomp;
if (/^([^t]+)\t(.*)$/) {
$aa = $1;
$bb = $2;
if (defined($xx{$aa})) {
if (defined($yy{$bb})) { # ★
print "$aa\t$bb\t\#【$xx{$aa}】\n";
}
}
}
}
close FILE;
}
どうかご教示お願いいたします。
No.3ベストアンサー
- 回答日時:
ひょっとしてこういう結果が欲しかった?
>perl mogera.pl
りんご 果物 #【apple】
ばなな 果物 #【banana】
なし 果物 #【pear】
細かな間違いもあるけど、ハッシュを勘違いしているような気もします。
#!/usr/bin/perl
# -*- coding: utf8 -*
use strict;
use warnings;
use feature 'say';
use utf8;
binmode STDOUT, ':encoding(cp932)';
my $list =
"りんご リンゴ 果物 apple
おれんじ オレンジ 色 orange
ばなな バナナ 果物 banana
もも モモ 花 peach
もも モモ 木 peach
なし ナシ 果物 pear
あんず アンズ 木 apricot
あんず アンズ 実 apricot";
my %xx;
my %yy;
foreach my $line (split qq{\n}, $list) {
if ($line =~ /(.*) (.*) (.*) (.*)/) {
$xx{$1} = $4;
$yy{$1} = $3;
}
}
while (my $line = <DATA>) {
if ($line =~ /^([^t]+)\t(.*)$/) {
print "$1\t$2\t\#【$xx{$1}】\n" if (exists $xx{$1} && $yy{$1} eq $2);
}
}
__END__
りんご果物
おれんじ果物
ばなな果物
もも果物
なし果物
あんず色
>ひょっとしてこういう結果が欲しかった?
そうです!
おかげさまで望みのものができました。
>$yy{$1} = $3;
ここはもとのままで良かったんですね・・・。
仰るとおり、ハッシュについて分かっていませんでした。
>print "$1\t$2\t\#【$xx{$1}】\n" if (exists $xx{$1} && $yy{$1} eq $2);
この辺の書き方もよく分かっていなかったので、
とても参考になりました。
本当に助かりました。ありがとうございます!
No.2
- 回答日時:
関係ないですけど,
$xx{$f1} = $f4; #▲
$yy{$f1} = $f3; #▲
ってあってます? いや, $f2 が使われていないなぁと思って....
まあ, これはその前の if 文の中に入れるべきのような気もしますが.
実例が欲しいなぁというのは #1 の通り. あと, 念のためバージョンがあるといいかもしれない.
この回答への補足
>$xx{$f1} = $f4; #▲
>$yy{$f1} = $f3; #▲
>ってあってます? いや, $f2 が使われていないなぁと思って....
とりあえず、この時点では$f2はいらないので省略しています。
でも、この部分は#1さんへの捕捉のようにしています。
実例も見ていただけたらありがたいです。
ちなみにバージョンはperl5.8です。
No.1
- 回答日時:
defined じゃなくて exists で判定すべきだと思うけど
現象が起きるデータがないとなんともいえませんね。
この回答への補足
すみません、訂正です。
$yy{$f1} = $f3; #▲
↓
$yy{$f3} = $f3;
こう書いたのでした・・・。
現象が起きるデータは、例えば、
<リストの内容>
りんご リンゴ 果物 apple
おれんじ オレンジ 色 orange
ばなな バナナ 果物 banana
もも モモ 花 peach
もも モモ 木 peach
なし ナシ 果物 pear
あんず アンズ 木 apricot
あんず アンズ 実 apricot
<ファイルの内容> # 区切り文字はタブ
りんご果物
おれんじ果物
ばなな果物
もも果物
なし果物
あんず色
<出力結果>
りんご果物#【apple】
おれんじ果物#【orange】
ばなな果物#【banana】
もも果物#【peach】
なし果物#【pear】
あんず色#【apricot】
リストの$f3と一致しない以下の3つはprintされないようにしたいのですが、
printされてしまいます・・・。
おれんじ
もも
あんず
簡略化してみると、
>$aaとマッチするものがリストに2つ以上ある時にこの現象がおきるようなのですが、
これは関係なかったようです。
一つしかない「おれんじ」が出てきてるし・・・
根本的に間違っている気がしてきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- 数学 「FFTの基本は、DFTはサンプル数Nが偶数なら 2つのDFTに分解できるということ。 分解するとD 3 2022/03/31 21:01
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで特定文字列から特定文字...
-
テキストファイルで提出とは?
-
openした後、closeしないでプロ...
-
Perlのエラーについてご教授く...
-
perlの構文でカンマの意味が分...
-
Perl の外部モジュールの利用方法
-
Perlでsprintf("%02d",$month)...
-
Perlでの文字列置換
-
フローチャート 九九
-
perl LWPでURLにアクセスした時...
-
perl 初等プログラミングについて
-
Perlで、「が」を、「...
-
Windows版のPerlについて
-
このファイルを開く方法で困っ...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
Perlで特定文字列から特定文字...
-
Wallpaper Engineでおすすめの...
-
Perlのエラーについてご教授く...
-
アルファベットに付いて質問し...
-
Strawberry Perl for Windows ...
-
bashスクリプト
-
テキストファイルで提出とは?
-
Perl の外部モジュールの利用方法
-
#!/usr/bin/perlで書きだしたCG...
-
Windows10においての『Perl』の...
-
perlのflock関数でロックをかけ...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
画像が表示でnull; this.src
-
ターミナルで特定の文字と文字...
-
英数文字列のうちの数値を4桁に...
おすすめ情報