0

テキスト ファイルを解析するこの特定のコードが何をしているのかをよりよく理解するのを誰かが助けてくれるかどうか疑問に思っていました。

  while ($line = <STDIN>) {
    @flds = split("\t", $line);
    foreach $fld (@flds) {
        if ($fld =~ s/^"(.*)"$/\1/) {
            $fld =~ s/""/"/g;
        }
    }
    print join("\t", @flds), "\n";
}

などのテキスト ファイルを解析するための開始点として、このコード ブロックが与えられます。

Name    Problem #1  Comments for P1 E.C. Problem    Comments    Email
Park, John  17  Really bad. 5       park@gmail.edu
Doe, Jane   100 Well done!  0   Why didn't you do this? doe2@gmail.edu
Smith, Bob  0       0       smith9999@gmail.com

...これは、解析されたテキストに基づいてフォーマットされた出力を設定するために使用されます。

必要な情報の特定の部分にアクセスする方法を知るために、コード ブロックがどのように情報を解析および保持しているかを完全に理解するのに苦労しています。上記のコードが各ステップで何をしているのかを誰かがよりよく説明できますか?

4

1 に答える 1

1

これは実際には、CSV ファイルを解析するための非常にくだらない方法のように見えます。

while ($line = <STDIN>) { #read from STDIN 1 line at a time.
    @flds = split("\t", $line);  #Split the line into an array using the tab character and assign to @flds
    foreach $fld (@flds) {  #Loop through each item/column that's in the array @fld and assign the value to $fld
        if ($fld =~ s/^"(.*)"$/\1/) {  #Does the column have a string that is surrounded in quotes?  If it does,  replace it with the string only.
            $fld =~ s/""/"/g; #Replace any strings that are only two double quotes.
        }
    }
    print join("\t", @flds), "\n";  #Join the string back together using the tab character and print it out.  Append a line break at the end.
}
于 2013-06-26T00:15:45.603 に答える