Re: [請益] 兩份log差異比較

看板Perl作者 (啊)時間4年前 (2020/03/30 09:54), 編輯推噓2(200)
留言2則, 2人參與, 4年前最新討論串2/2 (看更多)
nash7555 您好, 粗略看來,您的程式前兩段是將原 log 檔進行一點過濾,並將篩完之後的 成果存去 TEMPNEW, TEMPORI 。而最後將兩檔比對的結果存去 DIFFLIST。 最後一段卡關點的程式碼尚不完全,但從您的文字描述看來,您預期 TEMPNEW 與 TEMPORI 內容會有部份重複,而這程式的主要目的,則是要 將重複的部份消除後輸出到 DIFFLIST。 以下是我的幾點建議: 1. 或許可以將檔案全數讀到記憶體中試試。如果是讀成兩個陣列的話, 或許以下這段程式碼就能解決前述問題: my @content_c; for my $line_a (@content_a) { my $dup = 0; for my $line_b (@content_b) { if ($line_a eq $line_b) { $dup = 1; last; } } if ($dup) { push @content_c, $line_a; } }   print DIFFLIST $_ for @content_c; 雖然我不知道實際上您的要處理的這兩個檔案多大, 會不會把記憶體全用掉這我就無法判斷了。 2. 如果因故必須採用暫存檔的做法,我印象中,比須使用 seek() (perldoc -f seek) 在適當的時機將檔案游標移回開頭,例如: while (my $line_a = <TEMPNEW>) { my $dup = 0; seek(TEMPORI, 0, 0); while(my $line_b = <TEMPORI>) { ... } ... } 3. 如果可以使用 cpan 模組 List::Util 中的 `uniq` 函式,前述 (1) 的部份 可以簡化為一行: my @content_c = uniq(@content_a, @content_b); 以上。提供給您參考。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.134.77 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1585533271.A.F1B.html

03/30 22:07, 4年前 , 1F
推(Y)
03/30 22:07, 1F

04/02 07:31, 4年前 , 2F
突然想起有Algorithm::Diff 這個模組
04/02 07:31, 2F
文章代碼(AID): #1UWL5NyR (Perl)
文章代碼(AID): #1UWL5NyR (Perl)