取字串 |
答題得分者是:jow
|
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
在站內搜尋, 應該可以找到不少資料
我最近好像特別會"分離字串"這一招... [code delphi] //------------------------------------------------------------------------------ procedure TForm1.Button3Click(Sender: TObject); const SSS = 'V31512-L03-7,391,2007/11/19,XXXX,4500006218,13'; var I, J: Integer; L, M: TStringList; begin L := TStringList.Create; try L.Text := SSS; //模擬自檔案載入 M := TStringList.Create;//用來分離CVS字串 try for I := 0 to L.Count-1 do begin M.CommaText := L[I]; for J := 0 to M.Count-1 do begin ///////餵到資料庫去 //////SQL.Add(QuotedStr(Trim(M[J])));//請依需求修改////// end; end; finally FreeAndNil(M); end; finally FreeAndNil(L); end; end; //------------------------------------------------------------------------------ [/code] ===================引 用 delphi 文 章=================== 各位大大 我宣告了一個TStringList 讀進的檔案為 V31512-L03-7,391,2007/11/19,XXXX,4500006218,13 現在我讀取及轉存於db的方式為 SQL.Add(QuotedStr(Trim(Copy(sLine, 1, 12))) ','); 這個有個缺點 就是如果字串的長度改變我的程式就會存取錯誤 我想請問大大 要如何取得逗點前的字串 這樣就不會應長度的改變而影響 謝謝
編輯記錄
jow 重新編輯於 2007-11-19 19:28:25, 註解 無‧
|
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
謝謝大大
但是如果用csv檔載入後 L.Text := sLine(string)-->在L.text最後會有亂碼 且這樣分離我無法將想要的值放進相對應的欄位 ===================引 用 jow 文 章=================== 在站內搜尋, 應該可以找到不少資料 我最近好像特別會"分離字串"這一招... [code delphi] //------------------------------------------------------------------------------ procedure TForm1.Button3Click(Sender: TObject); const SSS = 'V31512-L03-7,391,2007/11/19,XXXX,4500006218,13'; var I, J: Integer; L, M: TStringList; begin L := TStringList.Create; try L.Text := SSS; //模擬自檔案載入 M := TStringList.Create;//用來分離CVS字串 try for I := 0 to L.Count-1 do begin M.CommaText := L[I]; for J := 0 to M.Count-1 do begin ///////餵到資料庫去 //////SQL.Add(QuotedStr(Trim(M[J])));//請依需求修改////// end; end; finally FreeAndNil(M); end; finally FreeAndNil(L); end; end; //------------------------------------------------------------------------------ [/code] ===================引 用 delphi 文 章=================== 各位大大 我宣告了一個TStringList 讀進的檔案為 V31512-L03-7,391,2007/11/19,XXXX,4500006218,13 現在我讀取及轉存於db的方式為 SQL.Add(QuotedStr(Trim(Copy(sLine, 1, 12))) ','); 這個有個缺點 就是如果字串的長度改變我的程式就會存取錯誤 我想請問大大 要如何取得逗點前的字串 這樣就不會應長度的改變而影響 謝謝 |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
L.Text := sLine(string)<<--這是???
你可以將完整程式碼貼附上來 或者你可以參考以下最近回應的篇幅: http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=91334 http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=91306 http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=91264 練習一下如何利用TStringList的一些特性, 來處理字串.... ===================引 用 delphi 文 章=================== 謝謝大大 但是如果用csv檔載入後 L.Text := sLine(string)-->在L.text最後會有亂碼 且這樣分離我無法將想要的值放進相對應的欄位
編輯記錄
jow 重新編輯於 2007-11-19 22:52:44, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
我的程式碼如下
[code delphi] Sku.Count; for i := 1 to iRecordCount do begin Line := Sku.Strings[i - 1]; // 空白行? if Trim(Line) = '' then Continue; SQL.Clear; SQL.Add('INSERT INTO INV_IN_TEMP_BAT'); SQL.Add('('); SQL.Add('SKUID,'); // 品名 SQL.Add('SKUID_QTY,'); // 數量 SQL.Add('INDAT_TEP,'); // 進貨日期 SQL.Add('SKUNME,'); // 供應商 SQL.Add(')'); SQL.Add('VALUES('); SQL.Add(QuotedStr(Trim(Copy(sLine, 1, 12))) ','); // 品名 SQL.Add(QuotedStr(Trim(Copy(sLine, 14, 16))) ','); // 數量 SQL.Add(QuotedStr(Trim(Copy(sLine, 18, 30))) ','); // 進貨日期 SQL.Add(QuotedStr(Trim(Copy(sLine, 48, 15))) ','); // 供應商 SQL.Add(');'); ExecSQL; end; Tmp.Free; end; end; [/code] ===================引 用 jow 文 章=================== L.Text := sLine(string)<<--這是??? 你可以將完整程式碼貼附上來 或者你可以參考以下最近回應的篇幅: http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=91334 http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=91306 http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=91264 練習一下如何利用TStringList的一些特性, 來處理字串.... ===================引 用 delphi 文 章=================== 謝謝大大 但是如果用csv檔載入後 L.Text := sLine(string)-->在L.text最後會有亂碼 且這樣分離我無法將想要的值放進相對應的欄位 |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
假設 D:\INPUT.TXT 的內容為:
V31510-L00-0,390,2007/11/10,XXXX,4500006010,00 V31511-L01-1,391,2007/11/11,XXXX,4500006111,01 V31512-L02-2,392,2007/11/12,XXXX,4500006212,02 V31513-L03-3,393,2007/11/13,XXXX,4500006313,03 V31514-L04-4,394,2007/11/14,XXXX,4500006414,04 V31515-L05-5,395,2007/11/15,XXXX,4500006515,05 V31516-L06-6,396,2007/11/16,XXXX,4500006616,06 V31517-L07-7,397,2007/11/17,XXXX,4500006717,07 V31518-L08-8,398,2007/11/18,XXXX,4500006818,08 V31519-L09-9,399,2007/11/19,XXXX,4500006919,09 以下程式碼供你參考, L: TStringList --> 用來載入資料檔案 M: TStringList--> 用來分離L中每一列資料的欄位 [code delphi] //------------------------------------------------------------------------------ procedure TForm1.Button1Click(Sender: TObject); var I: Integer; L, M: TStringList; FileName: string; begin FileName := 'D:\INPUT.TXT'; if FileExists(FileName) then begin L := TStringList.Create; try L.LoadFromFile(FileName); M := TStringList.Create; try for I := 0 to L.Count-1 do begin M.CommaText := L[I];//L[I] stand for L.Strings[I] if M.Count = 6 then //表示你的每一資料列有六個欄位 begin (*以第一列資料為例, 這六個欄位分別為 M[0]-->V31510-L00-0 M[1]-->390 M[2]-->2007/11/10 M[3]-->XXXX M[4]-->4500006010 M[5]-->00 *) end; end; finally FreeAndNil(M); end; finally FreeAndNil(L); end; end; end; //------------------------------------------------------------------------------ [/code] |
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
謝謝大大
已經解決囉~~ ===================引 用 jow 文 章=================== 假設 D:\INPUT.TXT 的內容為: V31510-L00-0,390,2007/11/10,XXXX,4500006010,00 V31511-L01-1,391,2007/11/11,XXXX,4500006111,01 V31512-L02-2,392,2007/11/12,XXXX,4500006212,02 V31513-L03-3,393,2007/11/13,XXXX,4500006313,03 V31514-L04-4,394,2007/11/14,XXXX,4500006414,04 V31515-L05-5,395,2007/11/15,XXXX,4500006515,05 V31516-L06-6,396,2007/11/16,XXXX,4500006616,06 V31517-L07-7,397,2007/11/17,XXXX,4500006717,07 V31518-L08-8,398,2007/11/18,XXXX,4500006818,08 V31519-L09-9,399,2007/11/19,XXXX,4500006919,09 以下程式碼供你參考, L: TStringList --> 用來載入資料檔案 M: TStringList--> 用來分離L中每一列資料的欄位 [code delphi] //------------------------------------------------------------------------------ procedure TForm1.Button1Click(Sender: TObject); var I: Integer; L, M: TStringList; FileName: string; begin FileName := 'D:\INPUT.TXT'; if FileExists(FileName) then begin L := TStringList.Create; try L.LoadFromFile(FileName); M := TStringList.Create; try for I := 0 to L.Count-1 do begin M.CommaText := L[I];//L[I] stand for L.Strings[I] if M.Count = 6 then //表示你的每一資料列有六個欄位 begin (*以第一列資料為例, 這六個欄位分別為 M[0]-->V31510-L00-0 M[1]-->390 M[2]-->2007/11/10 M[3]-->XXXX M[4]-->4500006010 M[5]-->00 *) end; end; finally FreeAndNil(M); end; finally FreeAndNil(L); end; end; end; //------------------------------------------------------------------------------ [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |