@UserDataNum=qw(11 13 34)
@PDataLinesの中身
1<>タイトル<>2009/02/10<>適当なデータ<>適当なデータ2<>
2<>タイトル2<>2009/03/13<>適当なデータ<>適当なデータ2<>
..
50<>タイトル3<>2009/03/23<>適当なデータ<>適当なデータ2<>
$TODAY=今日の時間;
foreach(0..$#PDataLines){
my@aaa= split(/<>/,$PDataLines[$_]);
my$a2 = $aaa[2];$a2 =~s{/}{}g;
#ここの処理で@UserDataNumに入っている数字と一致する$aaa[0]を含む行を除外し、時間が今日以降のものを配列@Arrayに入れたいのです
if(($aaa[0] !~ /@UserDataNum/) && ( $TODAY < $a2)){
push(@Array,$PDataLines[$_]);
}
}
print "\@Array=@Array";
if(grep(!/@UserDataNum/, @PDataLines) && ( $TODAY2 < $a2)){
としてみたり試みているのですが、思うように出来ずにいます。
どなた様かご教授願えませんでしょうか
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
/@UserDataNum/
が何を意味するか確認しましたか?
実はどこか適切なところで
local $"='|';
を実行すれば終わりだったりして.
ご教授頂きありがとうございます。
local $"='|';
@PS = grep(!/^(@UserDataNum)/, @PDataLines);
local $"='<br>';
print "\@PS=@PS<br>";
とする事で思い通りの結果と確認が出来ました。
/配列/を展開する際、/(a|b|c)/のようなケースの場合に使えるんですね。
local $"='|';の使い方がわかり参考になりました。
ただ、
@PS = grep(!/^(@UserDataNum)/, @PDataLines);
とした場合、行の最初から指定かつ最長一致のルールで問題なさそうなのですが、思わぬ行にマッチしそうで今回は見送りにしましたが、
とても参考になるアドバイスありがとうございました。
No.2
- 回答日時:
$aaa[0] =~ /@UserDataNum/ は展開すると
$aaa[0] =~ /11 13 34/
となるので整数にマッチすることがないのが問題です。
この部分を grep で書き直してみたのが下記です。
if( not( grep {$aaa[0] == $_ } @UserDataNum ) && ( $TODAY < $a2)){
これで望みの動作になるのではないでしょうか。
参考URL:http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod# …
ご教授頂きありがとうございます。
まさしく一発で思い通りの結果を得る事が出来ました。
普段、not(grep{$ハッシュ == $_} 配列)の記述には慣れていない為
私は下記のように
unless(grep(/$aaa[0]/,@UserDataNum)){
if($TODAY2 < $a2){
push(@PS,$PDataLines[$_]);
}
}
考えていたのですが
見事1行でマッチさせる記述をご教授頂きありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
S9タイプからXタイプにデータ...
-
メモ帳(テキストデータ)をExc...
-
この行は既に別のテーブルに属...
-
VBにおいてフォーム間の変数の...
-
VBA 空白セルを削除ではない方...
-
大学のゼミのレポートがムカつ...
-
エクセルで2つの時系列のデー...
-
[C言語] コメント文字列を無視...
-
VBAを使ってOutlookメール本文...
-
ユーザーフォームのテキストボ...
-
シーケンサにパソコンからアク...
-
C# でDataTableの更新を高速化...
-
EXCELVBAでSQLserverからデータ...
-
Excelのマクロでワードのテキス...
-
0が含まれる幾何平均が「#NUM!」
-
WEBサイトの構築。表示データと...
-
CString型の文字列連結について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報