2016-03-27 21 views
-1

Lütfen bir dosyanın her satırındaki sayısal verileri saymama yardımcı olun, ve ayrıca satır uzunluğunu bulmak için. Kod, Perl'de yazılmalıdır. Örneğin ben gibi bir çizgi varsa: Böyle bir şey yapabileceğiniDosyadaki her bir satır için sayısal verilerin sayısı nasıl bulunur?

INPUT:I was born on 24th october,1994. 
Output:2 
+0

Burada sayısal veriler, 1947 gibi bir rakam dizisini ifade eder. –

+0

örnek girişi: మోతీలాల్ నెహ్రూ (ఆంగ్లం: Motilal Nehru) (మే 6, 1861 - ఫిబ్రవరి 6, 1931). భారతీయ స్వాతంత్ర్య సమర యోధుడు మరియు భారత జాతీయ కాంగ్రెస్ నాయకుడు. ఇతను, బలీయమైన రాజకీయ కుటుంబ స్థాపకుడు. çıktı: 4 (8,1861,6,1931) –

+0

Lütfen ek açıklamaları sorulara değil, yorumlara ekleyin. Ayrıca, soru belirsizdir. Çizginizdeki sayıların sayısal olan sayısını mı soruyorsunuz? Yoksa bir satırda bulunan farklı sayısal alt dizelerin sayısını mı soruyorsunuz? –

cevap

1

:

perl -ne 'BEGIN{my $x} $x +=() = /[0-9]+/g; END{print($x . "\n")}' file 
  • -n: yapar programda, etrafında aşağıdaki döngü varsaymak Perl neden olur sed -n veya awk gibi bir dosya ismi argümanları üzerinde yineleme yapar:

    LINE: 
        while (<>) { 
         ...    # your program goes here 
        } 
    
  • -e: bir program satırına girmek için kullanılabilir; $x += sonuç skalar bağlamda yeniden değerlendirilebilir hale ise

  • ()/[0-9]+/g yapacak listesi bağlamında değerlendirilmelidir (örneğin, $x +=() = /[0-9]+/g (yani () = /[0-9]+/g varsayılan girişi bulunan bir ya da daha çok basamaklı dizilerini ihtiva eden bir dizi döndürür) varsayılan girdide bulunan bir veya daha fazla sayıdaki dizilerin sayısını $x'a ekler); Tüm dosya işlendikten sonra END{print($x . "\n"), $x yazdıracaktır. Bu

    #!/usr/bin/perl 
    
    use warnings; 
    use strict; 
    
    my $file = 'num.txt'; 
    
    open my $fh, '<', $file or die "Failed to open $file: $!\n"; 
    
    while (my $line = <$fh>){ 
        chomp $line; 
        my @num = $line =~ /([0-9.]+)/g; 
        print "On this line --- " .scalar(@num) . "\n"; 
    } 
    close ($fh); 
    

    gibi test girdi dosyasını şey yapacağını

% cat file 
string 123 string 1 string string string 
456 string 
% perl -ne 'BEGIN{my $x} $x +=() = /[0-9]+/g; END{print($x . "\n")}' file 
3 
% 
0

- test olarak

This should say 1 
Line 2 should say 2 
I want this line to say 5 so I have added 4 other numbers like 0.02 -1 and 5.23 

çıkışını ----

On this line --- 1 
On this line --- 2 
On this line --- 5 

Normal ifadeyi ([0-9.] +) Kullanmak HERHANGİ bir sayıyla eşleşecek ve ondalık sayıları içerecektir (sanırım gerçekten sadece sayıyorsunuz ([0-9] +). .)

Yardım edin.

İlgili konular