2013-03-09 56 views
-1

我有一個輸入,它看起來像這樣如何從輸入文件讀取令牌?

輸入文件

ID     Score1 Score2 
ABC      1  2 
DEF      30  50 

我想在每行的ID和兩個成績,和我成功了,但我要問不存在任何函數可以得到一個單詞嗎?這意味着我調用此函數三次,然後我就可以拿到ID和兩個分數....

while(eof(Input) !=1) 
{ 
    $C = getc(Input); 
    if($C eq "\n") 
    { 
     $Signal = 0; 
     print Output @Elements; 
     print Output "\n"; 
     @Elements =(); 
    } 
    elsif($C ne " ") 
    { 
     if($Signal == 1) 
     { 
      push(@Elements,"-"); 
      $Signal = 0; 
     } 
     push(@Elements,$C); 
    } 
    else 
    { 
     $Signal = 1; 
    } 
} 

我發現

$Line = readline(*Input); 
@Line_elements = split(" ",$Line); 

可以工作.....

感謝

+0

請揣摩你的問題更好的標題眼下,標題確實不能說明問題,我不知道我理解你的問題你試圖在Perl中編寫C語言? – 2013-03-09 14:02:01

+0

不!這是真的!我看到Perl上的C編碼!我的眼睛!:\ – gaussblurinc 2013-03-09 16:15:47

+0

我之前寫C,所以有點奇怪....我會嘗試來形容更好,我的英文不好:( – user2131116 2013-03-10 10:00:57

回答

0

你也可以這樣做:

my ($id, $score1, $score2) = split/+/, $Line; 

/+ /是一個正則表達式;它需要關心一個或多個空白空間

+0

或者更簡單的'split'',$ Line' – choroba 2013-03-09 12:05:36

1

我不確定究竟應該輸出什麼(更好的是提供確切的樣本輸入和精確的樣本輸出,但是如果您只需要啓動女巫的線條就可以使用類似的東西字符串ID,然後兩個數值的分數:。

while ($line = <STDIN>) { 
    my ($id, $score1, $score2) = ($line =~ /^([A-Z]+)\s+([0-9]+)\s+([0-9]+)$/); 
    print $id; 
} 
+1

我想我應該開始學習正則表達式.... – user2131116 2013-03-09 12:42:51