2011-07-13 38 views
0

我想把一個文件放入記錄中,編號從記錄0到n並將其保存到輸出文件中。我的文件從AA開始到//並且有幾個AA和//所以我爲每個AA放置了記錄號,因爲有2000到3000個AA,所以我想把它們放在帶有數字的記錄中。有人能幫助我嗎?通過Perl創建一個文件的記錄問題

//

AA R00001

FA茶

OS fskjkterjykjlt

//

AA T00002

FA ACE2

OS咖啡

SQ MDNVVDPWYINPSGFAKDTQDEEYVQHHDNVNPTIPPPDNYILNNENDDGLDNLLGMDYY

//

AA T00003

FA健怡可樂

OS ewtji34ut893u569

SQ MTSICSSKFQQQHYQLTNSNIFLLQHQHHHQTQQHQLIAPKIPLGTSQLQNMQQSQQSNV

//

AA T00004

FA焦炭

OS jgerjgkhjetkh

SQ MKNNNNTTKSTTMSSSVLSTNETFPTTINSATKIFRYQHIMPAPSPLIPGGNQNQ

SQ RLRQHIPQSIITDLTKGGGRGPHKKISKVDTLRIAVEYIRSLQDLVDDLNGGSNIGANNA

//

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

my $ifh; 

my $ofh; 

my $line; 
my $recnum = 0; 
my $ifn = "factor data 1.txt"; 
my $ofn = "try.txt"; 
open ($ifh, "<$ifn") || die "can't open $ifn"; 
open ($ofh, ">$ofn") or die "can't open $ofn"; 
my $a = "\/\/ "; 

while ($line = <$ifh>) 
{ 
chomp $line ; 

    if ($line =~ m/$a\$/) 
     { 

     print "$ofh $line\n"; 

     $recnum++; 
    } 
     else 
{ 
     print "$ofh $recnum $line\n"; 
    } 
} 
     close ($ifh); 
     close ($ofh); 
+0

請告訴我們您所需的輸出。 – bitbucket

+0

您需要在問題中添加一個Perl標籤以獲得更多答案。 – bitbucket

回答

1

如果您使用更改記錄分隔符的Perl慣用法,則可以簡化這些類型的記錄I/O問題。現在每條記錄成爲一條線,線條很容易計算。

注:我也刪除了最後//所以我們不計算空記錄。

好吧......我猜你可能想是這樣的

#! /usr/bin/env perl 

use strict; 
use warnings; 

my $cntr = 0; 

print "Starting\n"; 

# change record seperator 
$/ = '//'; 

while ((<DATA>)) 
{ 
    print"============== Record number $cntr ======================\n"; 
    print "$_\n"; 
    print "========================================================\n"; 

    $cntr++; 
} 

exit 0; 


__DATA__ 

/

AA r00001 

FA tea 

OS fskjkterjykjlt 

// 

AA T00002 

FA ACE2 

OS coffee 

SQ MDNVVDPWYINPSGFAKDTQDEEYVQHHDNVNPTIPPPDNYILNNENDDGLDNLLGMDYY 

// 

AA T00003 

FA Diet coke 

OS ewtji34ut893u569 

SQ MTSICSSKFQQQHYQLTNSNIFLLQHQHHHQTQQHQLIAPKIPLGTSQLQNMQQSQQSNV 

// 

AA T00004 

FA coke 

OS jgerjgkhjetkh 

SQ MKNNNNTTKSTTMSSSVLSTNETFPTTINSATKIFRYQHIMPAPSPLIPGGNQNQ 

SQ RLRQHIPQSIITDLTKGGGRGPHKKISKVDTLRIAVEYIRSLQDLVDDLNGGSNIGANNA 

// 

具有輸出這樣

Starting 
============== Record number 0 ====================== 

/

AA r00001 

FA tea 

OS fskjkterjykjlt 

// 
======================================================== 
============== Record number 1 ====================== 


AA T00002 

FA ACE2 

OS coffee 

SQ MDNVVDPWYINPSGFAKDTQDEEYVQHHDNVNPTIPPPDNYILNNENDDGLDNLLGMDYY 

// 
======================================================== 
============== Record number 2 ====================== 


AA T00003 

FA Diet coke 

OS ewtji34ut893u569 

SQ MTSICSSKFQQQHYQLTNSNIFLLQHQHHHQTQQHQLIAPKIPLGTSQLQNMQQSQQSNV 

// 
======================================================== 
============== Record number 3 ====================== 


AA T00004 

FA coke 

OS jgerjgkhjetkh 

SQ MKNNNNTTKSTTMSSSVLSTNETFPTTINSATKIFRYQHIMPAPSPLIPGGNQNQ 

SQ RLRQHIPQSIITDLTKGGGRGPHKKISKVDTLRIAVEYIRSLQDLVDDLNGGSNIGANNA