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

TstringList一問~

答題得分者是:supman
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-04 15:04:51 IP:140.128.xxx.xxx 未訂閱
請問各位大大~TStringList是否會有過大的問題~~ 如~我讀一個文字檔時~篩選過後要存到另一個文字檔時~ 會發生錯誤來(大約到62左右)~但在這以下可以順利轉成功~ 不知問題是在哪~ 也有試過~TMemo但也是一樣~~ 有沒有比較好的方法呢??
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-04 15:09:56 IP:203.204.xxx.xxx 未訂閱
您好: 使用RichEdit試試看,如果您能讀進來,當然存進去也不是問題. 另外有錯誤請把錯誤訊息貼出來,別讓大家猜.
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-04 15:15:27 IP:140.128.xxx.xxx 未訂閱
引言: 您好: 使用RichEdit試試看,如果您能讀進來,當然存進去也不是問題. 另外有錯誤請把錯誤訊息貼出來,別讓大家猜.
喔喔~對不起厚~~~
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-04 15:22:32 IP:140.128.xxx.xxx 未訂閱
引言: 您好: 使用RichEdit試試看,如果您能讀進來,當然存進去也不是問題. 另外有錯誤請把錯誤訊息貼出來,別讓大家猜.
對了~還有大大你說的RichEdit~ 我程式碼大約是 st:=TStringList.Create; .... ....(篩選過程) ... st.SaveToFile('xxxxxx'); 但在~大大所提的沒法做到這~要在另用TextFile~這有點就多手續所以... 所以小弟想直接用這看看~謝囉!! 也想知問題是在哪!!!
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-04 15:25:47 IP:203.204.xxx.xxx 未訂閱
您好: 出現這總錯誤訊息一般來講應該是您把記憶體用超過了,您可以使用f7單部追蹤看看是否是這樣 如: List:TStringList有10個元素 List.Strings[11]存取第11各就會出現這樣的錯誤訊息. 您可以把那程式先單純化,測看看,或者貼出來我看看是哪邊出問題. 另外上傳圖片,請轉成jpg,以節省網路資源
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-04 15:29:37 IP:140.128.xxx.xxx 未訂閱
引言: 您好: 出現這總錯誤訊息一般來講應該是您把記憶體用超過了,您可以使用f7單部追蹤看看是否是這樣 如: List:TStringList有10個元素 List.Strings[11]存取第11各就會出現這樣的錯誤訊息. 您可以把那程式先單純化,測看看,或者貼出來我看看是哪邊出問題. 另外上傳圖片,請轉成jpg,以節省網路資源
s:=''; sk:=''; sp:=''; p:=0; j:=0; while j <=ttcount-1 Do Begin If (rd1[j].ItemIndex=0)And(rd2[j].ItemIndex=0) Then Begin s:=Trim(Copy(vt.Strings[tc],StrToInt(ed1[j].Text),StrToInt(ed2[j].Text))); p:=Length(s); If p
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-04 15:40:10 IP:203.204.xxx.xxx 未訂閱
您好: 你有先單步追蹤過了嗎?程式沒頭沒尾要怎看? rd1[j].ItemIndex=0 這各有可能引發錯誤 vt.Strings[tc] 這各也有可能引發錯誤 問題是rd,vt還有一些您在用的變數,只有您知道他的長度以及他是定義成什麼,這樣怎麼幫你? 另外請利用 〔Code〕 〔/code〕 將程式縮排. 發表人 - supman 於 2005/06/04 15:42:12
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-04 15:45:11 IP:140.128.xxx.xxx 未訂閱
引言: 您好: 你有先單步追蹤過了嗎?程式沒頭沒尾要怎看? rd1[j].ItemIndex=0 這各有可能引發錯誤 vt.Strings[tc] 這各也有可能引發錯誤 問題是rd,vt還有一些您在用的變數,只有您知道他的長度以及他是定義成什麼,這樣怎麼幫你? 另外請利用 〔Code〕 unit Utran; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ShellCtrls, ExtCtrls; type TForm1 = class(TForm) CheckBox1: TCheckBox; Label1: TLabel; OpenDialog1: TOpenDialog; Edit1: TEdit; Button1: TButton; Label3: TLabel; Label2: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Button2: TButton; Memo1: TMemo; RadioGroup1: TRadioGroup; Button3: TButton; Button4: TButton; SaveDialog1: TSaveDialog; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ByAdd(Sender:TObject); procedure Button2Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Check(Sender: TObject); private { Private declarations } public end; TEventOBJ=Object procedure TEditOnChange(Sender: Tobject); end; var Form1: TForm1; MyEvent:TEventOBJ; ttcount,tc:integer; ed1,ed2,ed3:array[0..20] of Tedit; rd1,rd2:array[0..20] of TRadioGroup; s1,s2,vt,st:TstringList; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then edit1.Text :=OpenDialog1.FileName; end; procedure TForm1.ByAdd(Sender:TObject); begin ed1[ttcount]:=TEdit.Create(Self); ed1[ttcount].Parent:=Self; ed1[ttcount].Left:=16; ed1[ttcount].Top:=168 ttcount*40; ed1[ttcount].Height:=21; ed1[ttcount].Width:=60; ed2[ttcount]:=TEdit.Create(Self); ed2[ttcount].Parent:=Self; ed2[ttcount].Left:=136; ed2[ttcount].Top:=168 ttcount*40; ed2[ttcount].Height:=21; ed2[ttcount].Width:=60; ed3[ttcount]:=TEdit.Create(Self); ed3[ttcount].Parent:=Self; ed3[ttcount].Left:=544; ed3[ttcount].Top:=168 ttcount*40; ed3[ttcount].Height:=21; ed3[ttcount].Width:=140; rd1[ttcount]:=TRadioGroup.Create(Self); rd1[ttcount].Parent:=Self; rd1[ttcount].Left:=240; rd1[ttcount].Top:=160 ttcount*40; rd1[ttcount].Width:=120; rd1[ttcount].Height:=33; rd1[ttcount].Columns:=2; rd1[ttcount].Items.AddStrings(s1); rd1[ttcount].ItemIndex:=0; rd2[ttcount]:=TRadioGroup.Create(Self); rd2[ttcount].Parent:=Self; rd2[ttcount].Left:=384; rd2[ttcount].Top:=160 ttcount*40; rd2[ttcount].Width:=120; rd2[ttcount].Height:=33; rd2[ttcount].Columns:=2; rd2[ttcount].Items.AddStrings(s2); rd2[ttcount].ItemIndex:=0; ed1[ttcount].OnChange:=MyEvent.TEditOnChange; ed2[ttcount].OnChange:=Myevent.TEditOnChange; ed3[ttcount].OnChange:=Myevent.TEditOnChange; end; procedure TEventOBJ.TEditOnChange(Sender:TObject); var i:integer; begin If (ed1[ttcount].Text<>'') And (ed2[ttcount].Text <>'')Or(ed3[ttcount].Text <>'') Then Begin inc(ttcount); If ttcount>6 Then Form1.Height:=Form1.Height 40; Form1.ByAdd(Sender); End; end; procedure TForm1.FormCreate(Sender: TObject); begin ttcount:=0; s1:=TstringList.Create; s1.Add('靠左'); s1.Add('靠右'); s2:=TstringList.Create; s2.Add('空白'); s2.Add('補零'); ByAdd(Sender); end; procedure TForm1.Button2Click(Sender: TObject); begin Memo1.Lines.LoadFromFile(Edit1.Text); end; procedure TForm1.Edit1Change(Sender: TObject); begin If Edit1.Text <>'' Then button2.Enabled:=True else Button2.Enabled:=False; end; procedure TForm1.Button4Click(Sender: TObject); begin s1.Free; s2.Free; close; end; procedure TForm1.Check(Sender: TObject); var s,sk,sp:string; i,j,p:integer; begin s:=''; sk:=''; sp:=''; p:=0; j:=0; while j <=ttcount-1 Do Begin If (rd1[j].ItemIndex=0)And(rd2[j].ItemIndex=0) Then Begin s:=Trim(Copy(vt.Strings[tc],StrToInt(ed1[j].Text),StrToInt(ed2[j].Text))); p:=Length(s); If p ----------------------------- 程式有跑過了丫~如前面所題~ 到第62即st.add(sk)~就會發生錯誤~ 但在62以下都是對的~
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-04 15:55:19 IP:203.204.xxx.xxx 未訂閱
您好: 把程式mail給我,我幫你追看看吧... sstsupman@pchome.com.tw 您所說的62我看到的是依各begin...= =
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-04 16:01:46 IP:140.128.xxx.xxx 未訂閱
引言: 您好: 把程式mail給我,我幫你追看看吧... sstsupman@pchome.com.tw 您所說的62我看到的是依各begin...= =
丫哈哈~不是62行啦~~ 是執行轉檔到第62個的意思啦~~ 就麻煩大大一下囉~~ 小弟是有用比較呆的方法去解決了~ 轉到第60檔時~先自存一次~在... 最後在合併~~不過這好呆的方法 = =
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-04 16:11:53 IP:203.204.xxx.xxx 未訂閱
請問我介面上要填什麼會出現錯誤? 您說62是您那各檔案的62,之前您沒秀出文字檔,神才會知道是哪個62....= =
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-04 16:16:28 IP:140.128.xxx.xxx 未訂閱
引言: 請問我介面上要填什麼會出現錯誤? 您說62是您那各檔案的62,之前您沒秀出文字檔,神才會知道是哪個62....= =
不用填什麼丫~只要抓取我那的文字檔~ 然後~第1個edit輸入1~第2個輸入6~ 就會有錯了!!! 還是~電腦記憶体太小了呢??你不會唷~~ 不知大大有沒有MSN之類的?? shunaarom@hotmail.com我的~
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-04 19:50:14 IP:59.104.xxx.xxx 未訂閱
[cdoe] 1.ed1,ed2,ed3:array[0..20] of Tedit; //<--ed3宣告0~20個陣列 2. var i:integer; t:textfile; begin vt:=TStringList.Create; vt.LoadFromFile(Edit1.Text); st:=TStringList.Create; If CheckBox1.Checked Then Begin For tc := 0 to vt.Count-1 Do //<--若vt.Count大於20 Begin If (ed3[tc].Text='') Then //<--ed3的陣列是乎是超過20個以上了!! Begin Check(Sender); End Else Begin End; [/code] 若使用超用宣告陣列的數目,很容易發生違規存取,但至於發生在哪裡,確不得而知了... 所以要配置大於或剛好的陣列數呀!! ps.稍微看了一下,並沒很認真的除錯,請自己除錯吧~:D 發表人 - jest0024 於 2005/06/04 19:53:53
shunaarom
一般會員


發表:8
回覆:34
積分:18
註冊:2003-07-02

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-05 14:04:07 IP:220.134.xxx.xxx 未訂閱
引言: [cdoe] 1.ed1,ed2,ed3:array[0..20] of Tedit; //<--ed3宣告0~20個陣列 2. var i:integer; t:textfile; begin vt:=TStringList.Create; vt.LoadFromFile(Edit1.Text); st:=TStringList.Create; If CheckBox1.Checked Then Begin For tc := 0 to vt.Count-1 Do //<--若vt.Count大於20 Begin If (ed3[tc].Text='') Then //<--ed3的陣列是乎是超過20個以上了!! Begin Check(Sender); End Else Begin End; [/code] If (ed3[tc].Text='') Then //<--ed3的陣列是乎是超過20個以上了!! 就如大大所說的~錯在這~ 其他的都可以~~ 以給分數了~對不起這位大大了囉!!>"< 若使用超用宣告陣列的數目,很容易發生違規存取,但至於發生在哪裡,確不得而知了... 所以要配置大於或剛好的陣列數呀!! ps.稍微看了一下,並沒很認真的除錯,請自己除錯吧~:D 發表人 - jest0024 於 2005/06/04 19:53:53
系統時間:2024-05-17 16:02:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!