數字填入欄位中 |
尚未結案
|
ksing
一般會員 發表:12 回覆:16 積分:5 註冊:2005-06-29 發送簡訊給我 |
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject);
var
s,s1,s2,s3,s4:string;
begin
s:='00940627000893000580';
s1:=Copy(s,1,4);//0094
s2:=Copy(s,5,4);//0627
s3:=Copy(s,9,6);//000893
s4:=Copy(s,15,6);//000580
end;
第二參數表示從哪邊開始,第三個參數表示要拷貝多少個字 發表人 - supman 於 2005/07/06 12:40:47
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 如果此字串中的內容是固定格式的﹐就可以直接使用Copy函數取出部分字串來填入到相對應欄位中﹒
例﹕
Var Str: String; begin Str := '00940627000893000580'; ADOTable1.FieldByName('年').AsString := Copy(Str, 3, 2); //取出Str字串中第三個字元開始﹐長度為2的字串內容﹐即'94' //賦給ADOTable1的年欄位 ....//略 end;只是需要注意各欄位形態的不同﹐在賦值給資料表欄位時需要對取出的字串內容做形態調整﹐如價錢欄位為Real形態﹐而Str字串中的最后兩位為價錢內容﹐在取出時就需要做形態上的轉換﹐如下﹕ ADOTable1.FieldByName('價錢').AsFloat := StrToFloat(Copy(Str, 19, 2)); ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
ksing
一般會員 發表:12 回覆:16 積分:5 註冊:2005-06-29 發送簡訊給我 |
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
當然可以
procedure TForm1.Button1Click(Sender: TObject);
var
s,s1,s2,s3,s4:string;
begin
s:=檔案的值//設一個迴圈去得到值就好了.
s1:=Copy(s,1,4);//0094
s2:=Copy(s,5,4);//0627
s3:=Copy(s,9,6);//000893
s4:=Copy(s,15,6);//000580
StringGrid1.Cells[x,y]:=xxx//填入StringGrid中
end;
|
ksing
一般會員 發表:12 回覆:16 積分:5 註冊:2005-06-29 發送簡訊給我 |
不知寫成這樣有什麼錯誤 Read(F,book);
StringGrid1.Cells[0,row] := Copy(str,3,6) ;
StringGrid1.Cells[1,row] := Copy(str,25,6);
StringGrid1.Cells[2,row] := book.COMPANY;
StringGrid1.Cells[3,row] := book.AUTHOR;
Inc(row);
(請問上面這句什麼意思? 因為是範例 不知道什麼意思)
StringGrid1.RowCount := row;
(這句又是什麼意思) 當我這樣去跑出來的時候
竟然前面兩個欄位(因為我是先動兩個欄位的程式碼)沒有讀資料進去
而是從(3,6) (25,6)的地方截斷 直接讀剩下的資料進去後面兩個欄位(欄位三 欄位四) 出了什麼錯呢? 謝謝各位的幫忙以及解答 發表人 - ksing 於 2005/07/06 14:30:32
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
Read(F,book);
StringGrid1.Cells[0,row] := Copy(str,3,6) ;
StringGrid1.Cells[1,row] := Copy(str,25,6);
StringGrid1.Cells[2,row] := book.COMPANY;
StringGrid1.Cells[3,row] := book.AUTHOR;
Inc(row);
當我這樣去跑出來的時候
竟然前面兩個欄位(因為我是先動兩個欄位的程式碼)沒有讀資料進去
而是從(3,6) (25,6)的地方截斷 直接讀剩下的資料進去後面兩個欄位(欄位三 欄位四) 你的Read是在做什麼的?你沒有給Str值阿,當然不會有資料進去...
Str:=Read(F,book);
StringGrid1.Cells[0,row] := Copy(str,3,6) ;
StringGrid1.Cells[1,row] := Copy(str,25,6);
應該是要像這樣才對,但不知道你的Read是做什麼的,會不會有傳回值,所以僅猜測. Inc(row);
(請問上面這句什麼意思? 因為是範例 不知道什麼意思)
StringGrid1.RowCount := row;
(這句又是什麼意思)
根據上下兩句猜測應該是
1.Inc(row);//將Row加1,等於row:=row 1;
2.StringGrid1.RowCount := row;//設定StringGrid有幾列.
|
ksing
一般會員 發表:12 回覆:16 積分:5 註冊:2005-06-29 發送簡訊給我 |
supman:
--------------------------------------------------------
你的Read是在做什麼的?你沒有給Str值阿,當然不會有資料進去...
Str:=Read(F,book);
--------------------------------------------------------
我嘗試 Str:=Read(F,book)
跑的時候卻出錯 以下是我欄位跑掉的情況
為什麼會讀不到 而且是整欄都讀不到呢?? 謝謝各位的幫忙
|
ksing
一般會員 發表:12 回覆:16 積分:5 註冊:2005-06-29 發送簡訊給我 |
supman:
--------------------------------------------------------
你的Read是在做什麼的?你沒有給Str值阿,當然不會有資料進去...
Str:=Read(F,book);
--------------------------------------------------------
我嘗試 Str:=Read(F,book)
跑的時候卻出錯 以下是我欄位跑掉的情況
為什麼會讀不到 而且是整欄都讀不到呢??
謝謝各位的幫忙
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
我問:
你的Read是在做什麼的?你沒有給Str值阿,當然不會有資料進去...
Str:=Read(F,book); 你答:
我嘗試 Str:=Read(F,book)
跑的時候卻出錯 牛頭不對馬嘴....
另外出錯,是出現什麼錯誤訊息,請動動你的手打出來...
這個Read(F,book)會出現錯誤訊息應該是沒有回傳值. 反問你,你前面說的
有一長串數字字串 ex:00940627000893000580
這資料你怎麼得到的????
也就是說Str資料你從哪填進去的???
StringGrid1.Cells[0,row] := Copy(str,3,6) ; 以下是我欄位跑掉的情況
為什麼會讀不到 而且是整欄都讀不到呢??
何謂欄位跑掉的情況,你所謂正常不跑掉他應該長什麼樣子?????
|
JustinShen
中階會員 發表:22 回覆:104 積分:80 註冊:2003-09-20 發送簡訊給我 |
哈哈,superman桑,不要激动。
显然ksing没有弄清楚Read函数的使用方法。 ksing,
我猜测您的Read(F,Book)是从文档文件中读取字串到Book中,而且使用的是记录式读取方法。也就是说Str实际上是在Book中了,否则时间价钱等等如何可以和book.COMPANY对应?
Str:=Read(F,Book)应该不能编译,Read函数不能返回左值。
您将比较完整的读取代码和Book有关代码贴上来,大家才能看清楚呀! Justin Shen
------
==================== 我为一切作努力! Justin Shen |
ksing
一般會員 發表:12 回覆:16 積分:5 註冊:2005-06-29 發送簡訊給我 |
type
TBook = record
RECDATE : String[10];
CUSNO : String[10];
YYMM : String[10];
AMT : String[10];
end;
begin
AssignFile(F,datafile);
Reset(F);
row := 1;
try
while not EOF(F) do
begin
Readln(F,str);
for i := 1 to 4 do ans[i] := '';
for i := 1 to length(str) do
StringGrid1.Cells[0,row] := copy(str,3,6);
StringGrid1.Cells[1,row] := copy(str,25,6);
StringGrid1.Cells[2,row] := copy(str,16,4);
StringGrid1.Cells[3,row] := copy(str,47,9);
//讀取資料到1...4的欄位裡頭
Inc(row);
StringGrid1.RowCount := row;
end; 以上是我依照需求再次改動的程式碼
如JustinShen所說的 的確是由txt檔案中讀出字串
請各位幫忙指正錯誤 謝謝
錯誤圖檔 稍早已上傳
|
jeff377
初階會員 發表:9 回覆:60 積分:33 註冊:2004-08-10 發送簡訊給我 |
你用TStrings來載入文字檔,然後一行一行處理會比較方便。 假設來源文字檔為C:\Data.txt,內容如下
00940627000893000580 00940627000893000581 00940627000893000582 00940627000893000583 00940627000893000584將資料載入StringGrid的程式碼如下 var stFile: TStrings; N1: Integer; sData: String; begin stFile:= TStringList.Create; try stFile.LoadFromFile('C:\Data.txt'); StringGrid1.RowCount:= stFile.Count; for N1:= 0 to stFile.Count-1 do begin sData:= stFile.Strings[N1]; //一次讀入一行 StringGrid1.Cells[1,N1 1] := copy(sData,1,4); StringGrid1.Cells[2,N1 1] := copy(sData,5,4); StringGrid1.Cells[3,N1 1] := copy(sData,9,6); StringGrid1.Cells[4,N1 1] := copy(sData,15,6); end; finally FreeAndNil(stFile); end; end; |
ksing
一般會員 發表:12 回覆:16 積分:5 註冊:2005-06-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |