2016-03-18 15 views
0

İyi çalıştığım bir komut dosyası var ama sahip olduğum sorun, tüm kelimeleri eşlemede birleştirip boşlukları kaldırmasıdır. Kimse bana ek olanı söyleyebilmemde yardımcı olabilirse veya komut dosyasındaki kelimeleri birleştirmekten sakınmak için eksiklerim varsa.Perl Komutu Eşlemede Boşlukları Kaldırıyor

use strict; 

my $find = '^M0|MT'; 
my $match = 0; 

open (NEW, ">", "Output.txt") or die "could not open:$!"; 
open (FILE, "<", "File.txt") or die "could not open:$!"; 

while (<FILE>) { 
    chomp; 

if ($match){ 
    $match = 0; 
    s/\s+//g; 
    print NEW "$_\n"; 
} 

if (/$find/){ 
    $match = 1; 
    print NEW "$_" 
} 
} 
close (FILE); 
close (NEW); 

Dosya Örnek

  U# mul acc  UNIT # HAS MULTIPLE ACCOUNTS   FAIL 

Çıktı Örneği (şu anda senaryom neler oluyor)

  U#mulaccUNIT#HASMULTIPLEACCOUNTSFAIL 
+1

\/\ s + // g; 'satırında ne yapmaya çalışıyorsunuz? – ThisSuitIsBlackNot

+0

Sağladığınız kod, örnek giriş için iddia ettiğiniz çıktıyı üretmiyor. Boş dosya üretir. Bunun nedeni, örnek File.txt dosyasında bulunmayan '^ M0 | MT' için arama yapmaktır. Örnek dosyayı, normal ifadeyle eşleşecek şekilde değiştirmek, yine de hak talebinizin çıktısını üretmez. Bunun yerine, orijinal satır Output.txt dosyasına (yeni satır eksikken) kaydedilir. – bart

+0

özel bilgiler nedeniyle ilk satırını kaldırdım, bunun için üzgünüm, genel bir satır eklemeliydim. (/ $ Find /) seçeneğimde, NEW yazısını nasıl ayarlayacağımı nasıl belirlerim, sadece karakterler ilk satırın sütunlarıyla eşleşiyorsa NEW yazdırır mı? @bart – PhoenixJay

cevap

1

@ThisSuitIsBlackNot zaten işaret gibi:

hat

s/\s+//g; 

Mekanlarınızı yiyorsunuz. Şu şekilde ifade eder: bir veya daha fazla boşluğun sırasını hiçbir şekilde değiştirmeyin ve tam giriş dizesi için tekrarlayın. Söyleyecek amaçlanan gibi

görünüyor:

s/\s+/ /g; 

yüzden, sadece tek bir boşlukla boşluklar dizisi değiştirilmesi.

+0

Teşekkür ederiz! @ThisSuitIsBlackNot, basit bir şey olduğunu biliyordum, sadece hayatım boyunca bunu anlayamadım. PERL için çok yeniyim, bu yüzden yavaşça dilimi yavaş yavaş öğrendim. – PhoenixJay