perl을 처음 사용했습니다. 그리고 나는이 스크립트를 작성하여 변경 로그를 포함하는 로그 파일에서 데이터베이스의 특정 테이블에 대해 기록 된 변경 사항을 가져와야합니다. 그리고 특정 테이블의 이러한 변경 사항은 새 파일에 저장되어야합니다 (지금은 .txt 파일로 스트리밍하고 있지만 실제로는 브라우저에 표시해야하지만 다음 단계로 진행해야합니다).perl의 출력에서 공백이 제외됩니다.
내 문제는 출력을 원하는대로 저장하고 있지만 모든 공백이 없어서 출력이 공백없이 하나의 문자열로 표시된다는 것입니다. 누구든지 도와 줄 수 있습니까? 어떻게 단어들 사이에 공간을 확보해야합니까?
또한 디버깅 할 때이 줄은 전체 파일을 공백없이 하나의 문자열로 사용하므로 "while (< @file>)"때문에이 문제가 발생한다는 것을 알았습니다. 그래서 누군가는 이것을 대신 할 대안이나 해결책을 제안 할 수 있습니다.
이 스크립트는 다음과 같습니다
#!/usr/bin/perl -w
use strict;
use warnings;
#take the file as input, (if want from command line use ARGV[0])
open(FILE, "</home/apareek/sample.txt") or die '\nfile not opened $!\n';
open(my $out, ">/home/apareek/output.txt") or die ":P :P";
my $line;
my @file = <FILE>;
#take table name as input
print "\nEnter the table name you want to make query for\n";
my $tbl_name = <STDIN>;
chomp($tbl_name);
my $new_tabname = $tbl_name . "...";
print "\nTable Name: $new_tabname\n";
if (grep(m/$new_tabname/, @file) eq 1) {
print "Table name exsts.\n";
while(<@file>) {
if (/^$tbl_name/ .. /^Check/) {
if($_ !~ /$new_tabname/ and $_ !~ /Checking/) {
print $out $_; # $out (is the handler of output file)
}
}
}
}
입력 데이터 :
Checking table BOARD_EQSL34V...
Checking table CFMGlobalTbl...
Checking table CFMMaTable...
!!!!!! Diff001: differences in record definition section
!!!!!! mdIdx : Record definition type differs Unsigned Int(4 Byte)(db1) vs. (db2)
Checking table CFMMdTable...
!!!!!! Diff002: differences in record definition section
!!!!!! mdIdx : Record definition type differs : Unsigned Int (4 Byte) (db1) vs. (db2)
Checking table CFMMepListTbl...
Checking table CFMMepTable...
입력 데이터의 섹션을 어떻게 게시하고'@ file'에 그것을 읽는가? – Fabricio
요청한대로 입력 데이터가 포함되었습니다. 그리고 스크립트의 추가 부분도 있으므로 @file에 그것을 읽는 방법을 알 수 있습니다. – ashish
무엇을 기대합니까'(<@file>) {...}'할 수 있습니까? for (@file) {...}'을 의미합니까? – Borodin