あるテキストファイルが以下の内容で記述されているとします。
a file1
a file1
a file1
b file1
b file1
b file1
c file2
c file2
d file2
d file2
e file2
e file2
f file3
f file3
f file3
上記のように列が二つあるテキストファイルについて、
2列目のfile名が1列目のどの値とひもづいて
いるかを処理するperlプログラムを作ることを考えます。
出来上がったperlによって上記テキストファイルを処理した結果は、
file1は aとb
file2は cとdとe
file3は f
とひもづいていることが分かる ということにしたいです。
これをperlプログラムで書くとき、条件として
一行一行を読みとるとき
if ( $_ =~ /(\S+)\s+(\S+)/ ){
を使っています。
そのため$1と$2に現在行の1列目,2列目が与えられた後、
ハッシュと配列を組み合わせて考えた場合どのようにすれば
いいのでしょうか。
また仮にテキストファイルの続きが存在し、
1列目がg 、2列目がfile1 の行があるとき
2列目で既に出てきた同じfile名はエラーとすることも考えた
場合どう記述するのか合わせてお願い致します。
長くなってしまい申し訳ないのですが、
ご指導ご鞭撻宜しくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
%hash = (
file1 => ['a', 'b'],
file2 => ['c', 'd', 'e'],
file3 => ['f'],);
ハッシュと配列の組み合わせで作るとすれば、上記のようなデータ構造になると思います。なお、遠く離れたファイル名をエラーにする場合は、現在処理中のファイル名を記憶しておく必要があります。
use strict;
open FH, 'xxx.txt' or die $!;
my ($ckey, %hash) = ('');
while (<FH>) {
if ($_ =~ /(\S+)\s+(\S+)/) {
if ($ckey eq $2) {
push @{$hash{$ckey}}, $1 unless grep { $1 eq $_ } @{$hash{$ckey}};
} elsif (exists $hash{$2}) {
print "$2 は既に出てきたためエラーとして処理をストップしました\n";
} else {
$ckey = $2;
push @{$hash{$ckey}}, $1;
}
}
}
close FH;
print "$_は ", join('と', @{$hash{$_}}), "\n" foreach sort keys %hash;
No.2
- 回答日時:
「また」以降で何を言っているのかわかりません. その場合に, どうして「エラー」なのですか? 「既に出てきた同じfile名」というなら, 2行目で「エラー」にならないとおかしいですよ.
ちなみに本題については基本的に
http://oshiete.goo.ne.jp/qa/7913474.html
で書かれているようにハッシュのハッシュでいくのが無難.
No.1
- 回答日時:
while(@line){
if ( $_=~/(\S+)\s+(\S+)/ ){
%check{$2}=$1; # =>じゃない
}
この場合keyがない場合は自動的に作られますから、すでにkeyが存在しているか否かを判断して代入しなければなりません。
unless( exists $check{$1}){}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- PHP ファイルアップロードの上限を増やす 7 2023/06/23 12:50
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- UNIX・Linux Linuxの実行結果を修正したいです。 6 2022/11/22 12:57
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- その他(プログラミング・Web制作) pythonのエラーについて 2 2022/08/17 17:17
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
ファイルをディレクトリ分配の...
-
openした後、closeしないでプロ...
-
perlのプログラミング 部分入れ...
-
Perlのエラーについてご教授く...
-
画像が表示でnull; this.src
-
perlプログラミング 空白行削除
-
Perlで特定文字列から特定文字...
-
ラズベリーパイ初心者です。 ラ...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
openした後、closeしないでプロ...
-
テキストファイルで提出とは?
-
INDIRECT 横に再度抽出したい
-
Perlで特定文字列から特定文字...
-
perlをバージョンアップしたら...
-
Wallpaper Engineでおすすめの...
-
arduino の割り込み処理について
-
アルファベットに付いて質問し...
-
Strawberry Perl for Windows ...
-
Perlで時間の計算
-
このファイルを開く方法で困っ...
-
TeraPadエディターの操作方法に...
-
cgiでサーバーにファイルを追加...
-
フローチャート 九九
-
LinuxにおいてのPerlのプログラ...
-
perl 初等プログラミングについて
-
Perlのエラーについてご教授く...
-
こんにちは ブラケッツでプログ...
-
bashスクリプト
-
perlプログラミング 空白行削除
おすすめ情報