如何读入行数据 |
答題得分者是:jow
|
nimo
一般會員 發表:5 回覆:9 積分:2 註冊:2007-11-15 發送簡訊給我 |
各位大侠,
问题:txt文件数据按行排列,如何将此txt文件读入,并转换成所需要的结果? hh01: ROW a0 1b abc 3a3 1hh1: ROW 2a b3 a3b 3h4h: ROW 4a 6b4 436 8dr h4h5: ROW 5b 8cc d9d 8ab 8h9h33: ROW 2ab 3ac 我希望得到如下文件样式: hh01 a0 hh01 1b hh01 abc hh01 3a3 1hh1 2a 1hh1 b3 1hh1 a3b 3h4h 4a 3h4h 6b4 3h4h 436 3h4h 8dr h4h5 5b h4h5 8cc h4h5 d9d h4h5 8ab 8h9h33 2ab 8h9h33 3ac 谢谢Jow的帮助! |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
處理字串問題, 建議多多練習TStrings如何使用
[code delphi] //----------------------------------------------------------------------------- procedure TForm1.Button2Click(Sender: TObject); var I: Integer; H: string; L, M: TStringList; begin if FileExists('D:\INPUT.TXT') then begin L := TStringList.Create; try L.LoadFromFile('D:\INPUT.TXT'); M := TStringList.Create; try for I := 0 to L.Count-1 do if (Pos('h',L[I])>0)and (Pos(':',L[I])>0) then H := L[I] else if (H <> '') and (L[I]<>'ROW') then M.Add(H #$20 L[I]); //OUTPUT if M.Count > 0 then begin ListBox1.Items.Text := M.Text; //顯示結果 M.SaveToFile('D:\OUTPUT.TXT'); //儲存結果 end; finally FreeAndNil(M); end; finally FreeAndNil(L); end; end; end; //----------------------------------------------------------------------------- [/code] 執行結果(D:\OUTPUT.TXT) hh01: a0 hh01: 1b hh01: abc hh01: 3a3 1hh1: 2a 1hh1: b3 1hh1: a3b 3h4h: 4a 3h4h: 6b4 3h4h: 436 3h4h: 8dr h4h5: 5b h4h5: 8cc h4h5: d9d h4h5: 8ab 8h9h33: 2ab 8h9h33: 3ac |
nimo
一般會員 發表:5 回覆:9 積分:2 註冊:2007-11-15 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
如果第一個 String 不含'h' 及 ':' 該怎麼處理???
===================引 用 nimo 文 章=================== Jow, 谢谢您的指点! 您的脚本需要一点细微的改动,才能得到所希望的结果,改动如下: else if ( 应该改为 else if (L[I] <> '') and (L[I]<>'ROW') then M.Add(H #$20 L[I]); 再次表示衷心的感谢!
編輯記錄
jow 重新編輯於 2007-11-19 23:09:01, 註解 無‧
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
將輸入資料檔函式化, 讓處理動作流程更清楚
顯示於ListBox1的內容是非必要的, 純粹是Trace 程式用途....... [code delphi] //------------------------------------------------------------------------------ procedure TForm1.Button1Click(Sender: TObject); var L: TStringList; I: Integer; begin L := nil;//初始化物件 if ProcessInput('D:\INPUT.TXT', L) then try ListBox1.Items.Text := L.Text;//顯示回傳結果 for I := 0 to L.Count-1 do begin //Do some thing end; finally FreeAndNil(L); end; end; //------------------------------------------------------------------------------ function TForm1.ProcessInput(const FileName: string; var ret: TStringList): Boolean; var I: Integer; H, S: string; L: TStringList; begin if Assigned(ret) then FreeAndNil(ret); ret := TStringList.Create;//產生回傳的TStringList; if FileExists(FileName) then begin L := TStringList.Create; try L.LoadFromFile(FileName); for I := 0 to L.Count-1 do begin S := Trim(L[I]); if S = '' then Continue else if (Pos('h',S)>0) and (Pos(':',S)>0) then H := Copy(S,1,Length(S)-1) else if (H <> '') and (S <> 'ROW') then ret.Add(H #$20 S); end; finally FreeAndNil(L); end; end; Result := ret.Count > 0; end; [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |