2017-10-03 35 views
0

TStringListから別のインデックスに特定の文字列をインデックスでコピーしようとすると、「インデックスの制限がありません」というエラーが発生します。Delphi:特定の文字列をStringlistから別の文字列にコピー

私は、パイプ "|"でフォーマットされた行を含むテキストファイルを持っています。デリミタ。私は(例えば、最初の行、)このような何かを得るために、'3M'で始まる行からのみのいくつかのアイテムをコピーしたい、私の先のファイルで

test.txt file

:それはこのようになります

 
3M 2189300002 12.99 

3MStringlist.strings[1]

2189300002Stringlist.strings[3]

です10

12.99はここStringlist.strings[6]

である私のコードです:

var 
    sl,new : tstringlist; 
    lscount,index : integer; 
begin 
    sl:= TStringList.Create; 
    sl.LoadFromFile('C:\Folder\test.txt'); 

    new := tstringlist.create; 

    lscount := lstringlist.Count; 

    for index := 0 to lscount do 
    begin 
    sl.delimiter := '|'; 
    sl.StrictDelimiter := True; 

    sl.DelimitedText := sl.Strings[index]; 

    if sl.Strings[1] = '3M' then 
     new.Add(sl.Strings[1]+sl.Strings[3]+sl.Strings[6]); 

    end; 

    new.SaveToFile('C:\Folder\new.txt'); 
    sl.Free; 
    new.Free 

end; 

私のコードが悪いのか?

答えて

2

コードにかなりの間違いがあります。

forループはインデックス0からlscountにループしていますが、TStringListの上限はlscount-1です。

slをループしている間にslを変更しています。各行を解析するときは、別のTStringListを使用する必要があります。

1から始まるインデックスを使用して解析された文字列にアクセスしていますが、TStringListでは、代わりに0ベースのインデックスが使用されています。

は、より多くのこのような何かを試してみてください:

var 
    sl, parse, new : TStringList; 
    index : Integer; 
begin 
    sl := TStringList.Create; 
    try 
    sl.LoadFromFile('C:\Folder\test.txt'); 

    new := TStringList.create; 
    try 
     parse := TStringList.Create; 
     try 
     parse.Delimiter := '|'; 
     parse.StrictDelimiter := True; 

     for index := 0 to sl.Count-1 do 
     begin 
      parse.DelimitedText := sl.Strings[index]; 

      if (parse.Count > 5) and (parse.Strings[0] = '3M') then 
      new.Add(parse.Strings[0] + ' ' + parse.Strings[2] + ' ' + parse.Strings[5]); 
     end; 
     finally 
     parse.Free; 
     end; 

     new.SaveToFile('C:\Folder\new.txt'); 

    finally 
     new.Free; 
    end; 
    finally 
    sl.Free 
    end; 
end; 
+0

この質問は私のためにフラッシュバックし、あなたの答えは私より多くの完了です。 –

+0

素晴らしい作品です、ありがとうございました。レミー – MKaiser

関連する問題