2016-03-28 10 views
-1

を使用してCSVファイルを読み込むには、私は、Delphi 5エラーは、Delphi 5

ファイルの内容は、私が

var 
    respCSV : TStringList ; 
    sLine : string ; 
    tf : TextFile; 
begin 
    respCSV := TStringList.Create ; 
    // prompt the user for a file-name then load into a string list 
    with openDialog1 do 
    begin 
    FileName := ''; 
    if Execute then 
    begin 
     AssignFile(tf, FileName); 
     Reset(tf); 
     while not eof(tf) do 
     begin 
     sLine := '' ; 
     ReadLn(tf,sLine); //In Debug/Evaluate it shows 2nd row perfectly 
     showMessage(sLine); //but in showMessage Here 2nd row is showing as 
     //null, While it has nulls only in start 
     respCSV.Add(sLine); //Adding 2nd row as empty row 

     end; //end while 
    end;//end if 
    end;//end with 
を読み取るために、次のコードを使用しています

1. a,b,c,d //1st line 
2. ,,,,e,f //2nd line 
3. n,d,e,f //3rd line 
4. a,c,e //4th line 

ある使用してCSVファイルの読み込みに問題が生じています

ファイルの2番目の行はヌルで始まります。,,,, e .. foo ..すべての行をヌルとして表示しています

+0

Nullがどういう意味ですか、それは文字ヌルですか、つまり#0ですか?その場合、#0は文字列ターミネータとみなされなければなりません。これが、2行目の空の文字列を取得する理由です。もし私があなたのところで、なぜCSVファイルにヌル文字があるのか​​を知ると、これは正しくないようです。文字列からヌル文字を除外することができます。ここにはヒントがあります(http://stackoverflow.com/a/18802086/800214)。 – whosrdaddy

+0

はい、ヌルターミネーター文字#0があります。 Survey MonkeyからこのCSVファイルをエクスポートしました。それはCSV形式のちょっとした調査回答用紙です。 – Abid

+0

ありがとう...ヌル文字のフィルタリングが機能しました。 – Abid

答えて

1

ファイルが存在しています正しく読んでください。文字列変数sLineはフルラインを保持します。ただし、ShowMessageはNULL文字(#0)をターミネータとして扱い、それ以外の文字は表示しません。

したがって、コードを読み込むには何も問題はありません。 sLineを空の文字列に初期化するのは、次の行に割り当てるため、無意味です。そして、あなたがそれを読み終えたら、ファイルを閉じることはありません。

+0

respCSV.LoadFromFile(FileName); 4行すべてを1行に読み込みます。 respCSV.countは4ではなく1になります。 – Abid

+0

@DavidHeffernan: 'TStrings.LoadFrom ...()'メソッドは、CR、bare-LF、CRLFの改行をサポートしています。チェック)。しかし、彼らが**サポートしていない、そして(現代版でさえ)サポートされていないものは、埋め込まれたヌルです。 'LoadFrom ...()'がヌルに遭遇すると、読み込みを停止して直ちに終了します。そして2行目がヌルで始まるので、最初の行だけが読み込まれます。そのため、 'Count'は1です。 –

関連する問題