0

テキストファイルとパイプキャラクターを組み合わせるために機能する、Alanの以前のソリューションの以下のソリューションを使用しています。ありがとう !

複数のテキスト ファイルを結合し、各行の末尾に現在のファイル名を追加します

#!/usr/bin/env perl
use strict;
use warnings;

use Text::CSV;

my $csv = Text::CSV->new( { 'sep_char' => '|' } );

open my $fho, '>', 'combined.csv' or die "Error opening file: $!";

while ( my $file = <*.txt> ) {
    open my $fhi, '<', $file or die "Error opening file: $!";
    ( my $last_field = $file ) =~ s/\.[^\.]+$//;  # Strip the file extension off
while ( my $row = $csv->getline($fhi) ) {
    $csv->combine( @$row, $last_field );  # Construct new row by appending the file           name without the extension
    print $fho $csv->string, "\n";        # Write the combined string to combined.csv
    }
}

次の 3 つの要件を満たしてソリューションを強化できる人がいれば、助かります。

1) テキスト データ内で、一部のデータが次の形式の引用符で囲まれています。|"XYZ NR 456"|

上記の解決策は、最終的な結合.csvファイルを開くときにこれらのデータを別の列に配置することです.マージ時にすべてのデータがパイプ文字内に結合されたままになるようにする方法はありますか.

2) 単語が見つかった行全体を削除するPlace_of_Destination

3) 現在のソリューションでは、各行の末尾にファイル名が追加されます。ファイル名をパイプ文字で分割したい

私のファイル名構造は X_INRUS6_08072013.txt です。ソリューションはパイプ文字とファイル名 X_INRUS6_08072013 を各行の最後に追加します。X | インラス6 | 08072013

これは可能ですか、すべての助けを前もって感謝します。

4

1 に答える 1

0

ポイント2については、行をスキップするために、関連する行をスキップする効果で「次のif」を使用できます。

next if ($line =~ /Place_of_Destination/)

または「場合を除き」、あなたの希望に応じて:

unless ($line =~ /Place_of_Destination/) {
    # do something
}

あなたがやろうとしていることを私が正しく理解していれば、このテストは 2 番目の「while」ループで使用されます。

于 2013-07-16T16:46:52.967 に答える