如何讀取有不同資料類型的檔案? |
答題得分者是:jow
|
lkkplayer
一般會員 發表:26 回覆:59 積分:17 註冊:2006-11-22 發送簡訊給我 |
請教大家
我有一個檔案叫PM.DAT 內容如下:底線代表空白,XXXXXXX是註解不讀 __1_ XXXXXXX __0_ XXXXXXX _150 XXXXXXX _100 XXXXXXX _15_ XXXXXXX __8_ XXXXXXX _60. XXXXXXX __1. XXXXXXX 0.01_ XXXXXXX PARAMETRIC MODEL XXXXXXX ____1.0___ ____1.0___ ____0.0___ XXXXXXX ____4.____ ____60.___ ____6.0___ ____0.____ XXXXXXX 我如何先讀到前面九個數值到某些變數,做完一些運算 再讀PARAMETRIC MODEL這個字串,做一些判斷後 再一次讀進三個數值到某些變數,做完一些運算 再一次讀進四個數值到某些變數,做運算 像這種讀檔,程式要怎麼寫壓?? |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
[code delphi] unit fMain; interface uses Forms, Classes, Controls, StdCtrls; type TArrayOfSingle = array of Single; TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private function SepValueStr(var S, ValueStr: string): Boolean; function ExtractValue(L: TStringList; Start: Integer): TArrayOfSingle; function GetModelValue(L: TStringList; P, ItemCount: Integer): TArrayOfSingle; end; var Form1: TForm1; implementation uses SysUtils; {$R *.dfm} function TForm1.SepValueStr(var S, ValueStr: string): Boolean; var I: Integer; begin I := Pos(#$20, S); Result := I > 0; if Result then begin ValueStr := Trim(Copy(S,1,I-1)); S := Trim(Copy(S, I, Length(S)-I)); end; end; function TForm1.ExtractValue(L: TStringList; Start: Integer): TArrayOfSingle; const VALUE_END = 'PARAMETRIC'; var S, T: string; I, K: Integer; begin SetLength(Result, L.Count); K := 0; for I := Start to L.Count-1 do begin S := Trim(L[I]); if Pos(VALUE_END, UpperCase(S)) > 0 then Break; if SepValueStr(S, T) then begin Result[K] := StrToFloat(T); Inc(K); end; end; SetLength(Result, K); end; function TForm1.GetModelValue(L: TStringList; P, ItemCount: Integer): TArrayOfSingle; var S, T: string; I: Integer; begin SetLength(Result, ItemCount); I := 0; S := Trim(L[P]); repeat if SepValueStr(S, T) then begin Result[I] := StrToFloat(T); Inc(I); end else Break; until I = ItemCount; SetLength(Result, I); end; procedure TForm1.Button1Click(Sender: TObject); const FILE_NAME = 'PM.TXT'; var I, K: Integer; S: string; L: TStringList; V: array[0..2] of TArrayOfSingle; begin if FileExists(FILE_NAME) then begin L := TStringList.Create; try L.LoadFromFile(FILE_NAME); V[0] := ExtractValue(L, 0); I := Length(V[0]); S := L[I]; Inc(I); V[1] := GetModelValue(L, I, 3); Inc(I); V[2] := GetModelValue(L, I, 4); //Show Extraction Result L.Clear; for K := 0 to Length(V)-1 do begin for I := 0 to Length(V[K])-1 do L.Add(Format('%.2f', [V[K][I]])); if K = 0 then L.Add(S); end; ListBox1.Items.Text := L.Text; //Show Extraction Result. finally FreeAndNil(L); end; end; end; end. [/code]
編輯記錄
jow 重新編輯於 2007-10-18 22:07:01, 註解 無‧
|
lkkplayer
一般會員 發表:26 回覆:59 積分:17 註冊:2006-11-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |