プログラム初心者です。
Perlで下記のような文字列処理のプログラムの書き方がわからず、質問させて頂きました。
【内容】
FILE_A.txtが「!」マークで区切られていて、「!」マークの下行の文字列をIPアドレスの右横に移動したものをFILE_B.txtに出力するという処理です。
「!」マークの下行の文字列の「name」は共通です。
--------------------------------------------
【FILE_A.txt】
!
name abcdeLV
123.123.123.123
123.123.123.124
123.123.123.125
!
name fghijLV
10.10.10.11
10.10.10.12
10.10.10.13 10.10.10.15
10.10.10.16
!
--------------------------------------------
↓
--------------------------------------------
【FILE_B.txt】
123.123.123.123 abcdeLV
123.123.123.124 abcdeLV
123.123.123.125 abcdeLV
10.10.10.11 fghijLV
10.10.10.12 fghijLV
10.10.10.13 10.10.10.15 fghijLV
10.10.10.16 fghijLV
--------------------------------------------
上記のようなPerlでの処理を具体的に教えて頂ければうれしいです。
本サイトのようなものを利用するのが初めてですので、不手際があるかもしれませんが
なにとぞよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
入力ファイルの構造に乱れがなければ、次のプログラムで処理できると思います。
use strict;
open IN, "FILE_A.txt" or die "Can't open FILE_A.txt: $!";
open OUT, ">FILE_B.txt" or die "Can't open FILE_B.txt: $!";
my $name;
while (my $line = <IN>) {
if (substr($line, 0, 1) eq '!') {
$name = '';
} elsif ($name eq '') {
$name = (split /\s+/, $line)[1];
} else {
$line =~ s/$/ $name/;
print OUT $line;
}
}
close IN; close OUT;
この度はご回答ありがとうございます。
早期にご回答頂き、またこちらが意図していたファイルの入出力まで
書いて頂いておりましたので、ベストアンサーにさせて頂きました。
本当にありがとうございました。
No.2
- 回答日時:
書いてある条件を素直に読めば
use strict;
my $name;
while (<>) {
chomp;
if (/^!/) {
last unless defined ($_ = <>);
chomp;
/^name\s+(\S+)/ or die;
$name = $1;
} else {
print "$_ $name\n";
}
}
くらい? あ, chomp は癖で書いてるだけです.
この度はご回答頂きましてありがとうございます。
Tacosan様が書いて頂いた方法でも、今回の処理ができるということで
勉強になりました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 指定した文字から指定した文字のスペースまでを削除するVBAの構文について 6 2022/07/24 22:20
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- PHP ここで言う空文字の意味とは? 1 2022/08/05 16:27
- Perl Windows10においての『Perl』のプログラムについて 1 2022/05/09 16:04
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
INDIRECT 横に再度抽出したい
-
perlで2次元配列をサブルーチ...
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
Strawberry Perl for Windows ...
-
Perl 重複カウント 上位3名
-
perlでリテラル値はメモリにど...
-
perlのrequireの動き方について...
-
Windows10においての『Perl』の...
-
TeraPadエディターの操作方法に...
-
Wコロン
-
perl qw 中でコメントアウトす...
-
Perl テキスト 列検索
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
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桁に...
おすすめ情報