線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:784
推到 Plurk!
推到 Facebook!

将数据存到文件中读取时出现错误

尚未結案
小丫123
初階會員


發表:85
回覆:62
積分:29
註冊:2004-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-20 17:08:52 IP:218.64.xxx.xxx 未訂閱
 s:=TStringList.Create;
   setlength(buf,20));
   for i:=0 to 3 do
   begin
     t:='';
     for j:=0 to 4 do
       begin
         buf[i*5 j]:=i*5 j*2;
         t:=t inttostr(buf[i*5 j]);
       end;
         s.Add(t);
   end;
s.SaveToFile('E:\test.txt'); 
这样能数值以矩阵的形式存在test.txt下,当我利用下面的方法取读取数据时,报告了错误?
  s:=Tstringlist.Create ;
  s.LoadFromFile('e:\test.txt');
  for i:=0 to s.Count-1 do
    buffer[i]:=strtoint(s[i]); 
我想实现以矩阵的形式存数据,但是有可以正确的读出数据,请问可以怎么实现呢?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-20 17:47:28 IP:61.222.xxx.xxx 未訂閱
  s:=Tstringlist.Create ;
  try 
    s.LoadFromFile('e:\test.txt');
    SetLength(Buffer,s.Count);        for i:=0 to s.Count-1 do
      buffer[i]:=strtoint(s[i]);
 finally
  S.Free;
 end;
小丫123
初階會員


發表:85
回覆:62
積分:29
註冊:2004-08-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-22 16:43:57 IP:218.64.xxx.xxx 未訂閱
  SetLength(Buffer,s.Count);
这条我已经加了,可是还是有问题,是不是
 s:=Tstringlist.Create ;
  s.LoadFromFile('e:\test.txt');
  for i:=0 to s.Count-1 do
    buffer[i]:=strtoint(s[i]) 
读取时是一行一行读取的吗?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-22 16:58:30 IP:61.222.xxx.xxx 未訂閱
>读取时是一行一行读取的吗? 是啊! >可是还是有问题, buffer[i]:=strtoint(s[i]) 應該是這行出問題,如果文件檔一行行讀出來 若該行內容非整數,那麼就會出問題。 您可以先 用Showmessage,看一下該行內容。是否為您所要的? for i:=0 to s.Count-1 do Showmessage(S[i]); 或者 buffer[i]:=strtoint(s[i]) 改成 buffer[i]:=strtointdef(s[i],0) {若無法轉成整數,就給0)
小丫123
初階會員


發表:85
回覆:62
積分:29
註冊:2004-08-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-22 17:12:05 IP:218.64.xxx.xxx 未訂閱
多谢wameng!! 读取是一行一行来,而不是一个字符一个字符来的话,我的程序去读取时是会出错,因为数据是以矩阵方式存的 1 2 3 4 1 3 5 4 4 15 42 13 这样一次读取出来的str 就有 1 2 3 4,要将这样的 strtoint一定实现不了,不知有没有什么办法可以解决这个问题,使其可以一个一个数字的读出呢?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-22 17:35:56 IP:61.222.xxx.xxx 未訂閱
{ WRITE }
procedure TForm1.Button1Click(Sender: TObject);
var
  Buf : Array of integer;
  I,J :Integer;
  T : String;
  S : TStringlist;
begin
  S := TStringlist.Create;
  Try
    Setlength(Buf,20);
    for I:=0 to 3 do
    begin
      T:='';
      for J:=0 to 4 do
      begin
        Buf[I*5 J]:=I*5 J*2;
        T := T   Format('m',[buf[I*5 J]]);
      end;
      S.Add(T);
    end;
    s.SaveToFile('E:\test.txt');
  finally
   S.Free
  end;
end;
{ READ }
procedure TForm1.Button2Click(Sender: TObject);
var
  Buf : Array of integer;
  I,J:integer;
  S : TStringlist;
begin
  S := TStringlist.Create;
  Try
    S.LoadFromFile('e:\test.txt');
    SetLength(Buf,S.Count*5);
    For I:=0 to S.Count-1 do
      if S[I]<>'' then
        For J := 0 to 4 do
          Buf[I*5   J] := Strtoint(Trim(Copy(S[I],1 (J*6),6)));      Finally
    S.Free;
  end;
end;
* 我以 6 的固定字節,方便取出對應的位置。 發表人 - wameng 於 2004/10/22 17:40:46
系統時間:2024-06-30 13:34:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!