全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3101
推到 Plurk!
推到 Facebook!

取字串

答題得分者是:jow
delphi
初階會員


發表:52
回覆:64
積分:38
註冊:2002-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-19 18:06:15 IP:219.76.xxx.xxx 訂閱
各位大大

我宣告了一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-19 19:27:35 IP:123.193.xxx.xxx 訂閱
在站內搜尋, 應該可以找到不少資料

我最近好像特別會"分離字串"這一招...


[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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-19 21:54:20 IP:219.134.xxx.xxx 訂閱
謝謝大大
但是如果用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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-19 22:52:03 IP:123.193.xxx.xxx 訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-20 00:27:44 IP:61.67.xxx.xxx 未訂閱
這是一個最基本的基本工, 請查詢 Pos 關鍵字, 可以找到你要的東西
delphi
初階會員


發表:52
回覆:64
積分:38
註冊:2002-05-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-11-20 09:19:29 IP:219.76.xxx.xxx 訂閱
我的程式碼如下

[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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-11-20 09:59:27 IP:210.66.xxx.xxx 訂閱
假設 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-11-20 11:11:27 IP:219.76.xxx.xxx 訂閱
謝謝大大
已經解決囉~~
===================引 用 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]

系統時間:2024-04-24 22:51:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!