2017-12-22 1 views
-4

데이터베이스의 레코드가 들어있는 큰 데이터 파일 (텍스트)이 있습니다. 각 레코드는 "-"(146 개)로 구분됩니다. 각 블록 구분자 사이의 텍스트를 해당 블록의 데이터를 기반으로 새 파일에 쓰고 싶습니다. 이 블록을 추출하고 작성해야하는 위 그래서파일에서 텍스트 블록을 추출하고 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. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

: 새로운 파일 이름은이 샘플 파일을 예를 들어 일 년 (예 : 2017)

를 데이터의 조각을 따라 포함해야 해당 레코드에 대한 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

무엇을 시도 했습니까? 어떤 문제가 있습니까? 코드와 샘플 데이터를 보여주십시오. 코드가 없으면 Stack Overflow가 질문에 가장 적합한 장소가 아닐 수도 있습니다. –

+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

관련 문제