这是我的数据分拣程序:
procedure TForm1.Button1Click(Sender: TObject);
var
  ASource, ALien,s: TStringList;
  i: Integer;
begin
  ASource := TStringList.Create;
  ALien := TStringList.Create;
  s:=TStringList.Create;
  ASource.LoadFromFile(d:\1.txt);
  for i := 0 to ASource.Count - 1 do
  begin
    ALien.Clear;
    ExtractStrings([' '], [],pchar(ASource.Strings[i]) , ALien);
    s.Add(ALien.Strings[6]+'      '+ALien.Strings[7]+'      '+ALien.Strings[8]);
    s.SaveToFile(d:\2.txt);
  end;end;
但是现在发现提取出来的数据都错位了,数据本来应该是以右边冒号对齐,但是现在数据提取后都变成了以左数字对齐。大侠们有没有办法解决我这个问题啊!!!!!
735:    11:      22:
805:     7:     113:
133:    54:      22:
857:     7:     272:
805:    32:      20:

解决方案 »

  1.   

    用format重新格式化输出
    改:
        s.Add(ALien.Strings[6]+'      '+ALien.Strings[7]+'      '+ALien.Strings[8]);

        s.Add(Format('%-8s%8s%8s',[ALien.Strings[6],ALien.Strings[7],ALien.Strings[8]]));
      

  2.   

    报list index out of bounds(6)这个错误是怎么回事啊??
      

  3.   

    你的数据中没有第6列,如是果你要得到你另一贴的要求,用:
     s.Add(Format('%-8s%4s%8s',[pchar(ALien.Strings[0]),ALien.Strings[1],ALien.Strings[3]]));
    就可以了(列数从0开始)
      

  4.   

    不要第一行和最后一行,改你的循环:
    for i := 0 to ASource.Count - 1 do

    for i := 1 to ASource.Count - 2 do
      

  5.   

    keiy,按照你的建议改了,现在报错为list index out of bounds(0)
      

  6.   

    1.一行和最后一行保持不变
     ASource.LoadFromFile(d:\1.txt);
      s.add(ASource.Strings[0]); 
      for i := 1 to ASource.Count - 2 do
      begin
        ALien.Clear;
        ExtractStrings([' '], [],pchar(ASource.Strings[i]) , ALien);
        s.Add(Format('%-8s%4s%8s',[pchar(ALien.Strings[0]),ALien.Strings[1],ALien.Strings[3]]));
      end;
      s.add(ASource.Strings[ASource.Count -1]); 
      s.SaveToFile(d:\2.txt);  //要将它移到循环外,否则,循环一次,写一次文件
    2.list index out of bounds(0),可能是你的1.txt有空行
      可这样改试试
      ExtractStrings([' '], [],pchar(ASource.Strings[i]) , ALien);
      if ALien.count>0 then
      begin
       s.Add(Format('%-8s%4s%8s',[pchar(ALien.Strings[0]),ALien.Strings[1],ALien.Strings[3]]));  end;
      

  7.   

    2.如果更安全式些:改
      if ALien.count>=3 then