2017-12-22 8 views
-4

データベースのレコードを含む大きなデータファイル(テキスト)があります。 各レコードは " - "(146個)で区切られています 各ブロックのデータに基づいて、各区切り文字の間にテキストを新しいファイルに書きたいと思います。新しいファイル名は、データの一部が含まれている必要があります年に続く(すなわち2017)ファイルからテキストのブロックを抽出し、perlを使って各ブロックを新しいファイルに書き出しますが、動作しません。

例えば、このサンプルファイル付き:

1. 12/18/17              
Company          
        PAGE 2 
    1:14 PM GET            CURRENTLY SELECTED DEBTORS 

------------------------------------------------------------------------------------------------------------------------ 
----------------------------- STATUS    **Acct:1234**  Disposition:9000 CANCEL      Wait: 04/11/17 

DEBTOR    Name:Doe John       
Ssn:123456789 Cbr: Ph:555-555-555 
         Rp:Doe John       Ssn:    Rp Ph: 
        Adr1:211 some road  POE:      Lgl: POE Ph: 
        City:anytown    Cty:      Canc:UNC Born:01/01/1937 
         St: VA Zip:54321  St:  Zip:    COF:N  Sal: 

        Clnt:00248 Someplace, 93076       Org: 4 
80.00 
        List:01/05/17 Srv:08/25/16 Pl95: Time:9 Calls:0 Con:0 Bal: 480.00 

Co-Maker's Previous Address Spouse's Previous Address MULTIPLE 
ACCOUNTS RM# Acct  Name/Client  Chk#/Lst Srv  Lpy 
Col Disp  Bal  Check Reason   Drivers Licen se # 
     PRN  INT  LI3  LI4  AIN  CC  ATY  MS1  PJI 1 142424* Doe John         
93076/00248/Somewhere 01/05/17 08/25/16   0 9000  
480.00 
    480.00  0.00  0.00  0.00 0.00 0.00 0.00  0.00 0.00 

2. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

だから、上からこのブロックを抽出し、それを記述する必要がありますそのレコードのAcct:1234データに基づいて1234_2017.txtという名前の新しいファイルに移動し、次のブロックに移動します。私は754レコードで最初のファイルのレコード数を数えました。このように合計10個のファイルがあります。

#!/usr/bin/perl -w 

use strict; 
use warnings; 

use POSIX 'strftime'; 

my $filename = "Facs_Data.txt"; 
my $outfile = "Acct_".strftime '%Y', localtime; 
my $start = "'-' x 146"; 

open (INFILE, "<$filename"); open (OUTFILE, ">$outfile"); 

while ($start) { 

    print $outfile; 
    next 
} 
close (INFILE); 
close (OUTFILE); 

ご意見をいただければ幸いです。

+3

何を試しましたか?あなたはどんな問題を抱えていますか?あなたのコードとサンプルデータを表示してください。コードがない場合は、スタックオーバーフローがおそらくあなたの質問に最適な場所ではありません。 –

+1

http://idownvotedbecau.se/nocode/ –

+1

インターネットで要件を掲示し、誰かがあなたのためにコードを書くのを待つことで、コンピュータプログラミングは達成されません。 – Borodin

答えて

1

あなたが試したことを説明することに何の努力もしないなら、私は自分の解決策を説明することに何の努力もしません。

#!/usr/bin/perl 

use strict; 
use warnings; 

local $/ = '>' . ('-' x 146) . "\n"; 
my $year = (localtime)[5] + 1900; 

# <> reads from STDIN or a filename given as an argument 
while (<>) { 
    next unless /\S/; # Ignore empty records (like the first one) 

    my ($acct) = /Acct:(\d+)/; 

    my $file = "${acct}_${year}.txt"; 
    open my $fh, '>', $file 
    or die "Can't open $file: $!\n"; 

    print $fh; 
} 
+2

質問者は説明に興味がないかもしれません。 – PerlDuck

+0

ありがとうございます - 多分私は適切な質問や間違った方法を求めていません。私が試したことは、出発点とinfileとoutfileを定義する以外に必要なことをどうやって行うのかがわからないため、次の何ものでもありません。 – Flintlock

+0

ご協力ありがとうございます。私は、これをもっとうまく説明する方法を失っているかもしれません。データの一部を削除し、個人情報を削除する可能性があります。元の投稿を編集します。 – Flintlock

関連する問題