テキストファイルの一括処理をしたいです。
同じ形式で書かれている下記のような
ファイルが複数個あり全てのファイルの
同フィールドだけ抜き出し、
抜き出した全てのデータを右側列にコンマ区切りで並べて
出力させたいのですがうまく並べられません。
配列がうまく使えていないと思うのですが
アドバイスをいただけませんでしょうか。
データは&で区切られておりこの例では左から3番目のフィールドを
処理の対象としてます。
file01
A&111&222&333&
A&444&555&666&
A&777&888&999&
file02
A&aaa&bb&cc&
A&ddd&ee&fff&
A&ggg&hhh&iiii&
file03
A&abab&bnb&ccc&
A&abab&bnb&ccc&
A&abab&bnb&ccc&
A&abab&bnb&ccc&
希望出力結果
222,bb,bnb,
555,ee,bnb,
888,hhh,bnb,
,,bnb,
希望結果のようなファイルを出力させたいです。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
質問にある条件だけならこんなのでも。
#!/usr/bin/perl
use strict;
use warnings;
use Fatal qw(:void open close);
my $isep = '&';
my $osep = ',';
open my $fp1, '<', shift;
open my $fp2, '<', shift;
open my $fp3, '<', shift;
while (1) {
my $rec1 = <$fp1>;
my $rec2 = <$fp2>;
my $rec3 = <$fp3>;
last if !$rec1 && !$rec2 && !$rec3;
my @field1 = split $isep, $rec1 if $rec1;
my @field2 = split $isep, $rec2 if $rec2;
my @field3 = split $isep, $rec3 if $rec3;
my @of;
push @of, $rec1 ? $field1[2] : '';
push @of, $rec2 ? $field2[2] : '';
push @of, $rec3 ? $field3[2] : '';
print join($osep, @of), "\n";
}
実行結果:
222,bb,bnb
555,ee,bnb
888,hhh,bnb
,,bnb
やっつけで書いたのでリファインの余地が大いにあります。
No.1
- 回答日時:
ん~, 全データを一旦配列に入れておけばいいだけだと思うんだけどなぁ. そんなに難しくないと思う.
例えば $i 番目のファイルの $j 行目にある, $k 番目のデータを
$data[$I][$j][$k]
に入れる... とか.
現状どうなってるかわからんのでなんともアドバイスしにくいんだけど.
この回答への補足
ありがとうございます。
質問の書き方が漠然としており申し訳ありません。
なにぶんビギナーの為つまづいておりました。
助言のおかげでなんとかうまくいけそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルデーターの並び替え 5 2022/08/06 09:59
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) エクセルでのマクロを使ったデータの並べ替え 3 2022/12/03 18:54
- その他(プログラミング・Web制作) 複数のテキストファイルの結合方法 2 2022/05/14 23:58
- Excel(エクセル) エクセル 任意の列数で分割する方法 3 2022/07/31 14:58
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- その他(プログラミング・Web制作) テキストデータ変換(プログラミング、linux、python) 8 2023/08/08 16:39
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- Microsoft ASP プログラミング関係で質問です。 3 2022/10/11 16:06
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
エクセルVBAで素数だけを出力す...
-
機器のI/OをArduinoでSDに記録...
-
教えて!perlから.exeファイル...
-
perlでの出力先設定
-
重複するデータを抽出できる秀...
-
sprintfについて
-
文字コードの変換(Shift-JISか...
-
DOSコマンドで、標準出力を出力...
-
ディレクトリの判別
-
csvファイルの横方向への改行に...
-
FindFirstFileとFindNextFileで...
-
VBAでCSVファイルを途中行まで...
-
Perlで フォルダ内の全て...
-
batファイルでrenameができませ...
-
ファイルの存在の有無を確かめ...
-
バッチファイルの作り方(CSV→...
-
Perlの変数に文字数制限(容量...
-
openした後、closeしないでプロ...
-
オープンしたファイルで行の連結
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
DOSコマンドで、標準出力を出力...
-
重複するデータを抽出できる秀...
-
Perlでファイルの末尾から指定...
-
sprintfについて
-
[Perl]ファイル出力のエンコー...
-
エクセルVBAで素数だけを出力す...
-
文字コードの変換(Shift-JISか...
-
テキストファイルから日本語部...
-
sprintfで10進数を桁数指定で16...
-
ファイル出力の改行コードをLFに
-
Perlからsyslog経由でログを出...
-
PerlからのCSV出力
-
perlでcsvの出力について
-
教えて!perlから.exeファイル...
-
バッチファイルで、記号を含む...
-
perl CGIでのhttpヘッダー出力...
-
print文で&(半角)文字のエラー...
-
Perlでエラーログに日時をつける
-
紙にもホームページにも同じレ...
おすすめ情報