如何抓取文字檔內的字串 |
尚未結案
|
Miki-lion
中階會員 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
現在我需要從一個文字檔內將一個字串抓出來,然後將內容給某一個元件 我在每一個元件內都設有他的判斷字元 EX:34---->%是對應給MaskEdit
#ABCD---->#是對應給CheckBox (抓到#ABCD,CheckBox就打勾) 我想我可以利用"搜尋"的方式來做我要的功能 下面是搜尋的程式碼,我想問的是哪一個是代表使用者"輸入"要尋找的字串
int FoundAt, StartPos, ToEnd; if (PageControl1->ActivePage==TabSheet1) { if (RichEdit1->SelLength) StartPos = RichEdit1->SelStart RichEdit1->SelLength; else StartPos = 0; ToEnd = RichEdit1->Text.Length() - StartPos; FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase); if (FoundAt != -1) { RichEdit1->SetFocus(); RichEdit1->SelStart = FoundAt; RichEdit1->SelLength = FindDialog1->FindText.Length(); } else ShowMessage("搜尋完畢"); } |
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
|
Miki-lion
中階會員 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
|
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
|
Miki-lion
中階會員 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
引言: 謝謝我已經弄好了 不過我只寫出找固定識別字 EX:CheckBox裡頭就只有"刪除"、"取代"、"前後插入"4個識別字 這4個都是固定會出現在檔案內的,所以要找出來沒問題 像是MaskEdit這種使用者輸入的內容不ㄧ定的,我就弄不出來了 MaskEdit元件的內容就是%XXXXX....長度內容不ㄧ定 只能知道%後面就是他的內容,接下來就卡住了><您好! 您既然知道的內容,那就可以用MaskEdit->Text.Length();看MaskEdit的長度來取得MaskEdit的內容了! 做法如:MaskEdit->Text.SubString(0,MaskEdit->Text.Length()); 不知是不是您要的! |
Miki-lion
中階會員 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
以下是我自己參考BCb程式碼所寫的格式範例(擷取)
void__Netcall Path::(TComponent* Owner);//路徑 { Opposite:[34]; //--->這給Maskedit用 Absolute:[#ABCD]; //--->這給CheckBox用 } //---------------------------------------------------------------------------1.如果使用者在CheckBox打勾就會在那地方寫上#ABCD(固定寫#ABCD) 2.輸入在MaskEdit的內容就會變成寫在34(輸入什麼就寫什麼進來) 這是原本我做好的功能,現在反過來,讀這個文字檔,要把 這2個元件內容寫回去 CheckBox因為固定出現#ABCD很好判斷 但是MaskEdit的內容、長度都不ㄧ定 只知道他會出現在哪一型哪一列,前面有識別字元"%" 並且至少有2到3個的MaskEdit內容連在一起 EX:Opposite:[34V7890]; |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Miki-lion 妳好: 妳可以使用字串找尋的方式,先找到關鍵字 Opposite:[ 字樣,然後記錄下該位置 (pos1),再由那個位置之後繼續去找 ] 符號 (pos2),這樣子妳就可以擷取到 [ 與 ] 之間的字串 (str),然後再以 % 符號為找尋對象,就可以將 str 拆解成數個子字串了,拆解的方式很多種,可以用 AnsiString 的 Pos() 函式找到下一個 % 符號處,然後以 SubString() 函式拆解出來,也可以用 StringReplace() 函式將 % 符號代換成換行符號,然後拆解給 TStringList 亦可,試試看吧。 7 天天敲鍵盤 v 時時按滑鼠 8
|
Miki-lion
中階會員 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
|
Miki-lion
中階會員 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
我想請問一下 我現在已經可以將我想要的這3個元件內容,寫到我想要的位置了 我有加一個清除鈕,同時清除掉元件內容,可是在RichEdit上的內容還是不變 而且在RadioButton元件裡頭,選擇其中一個後再選第二個,不是選項會跳過去第二個嗎? 可是他在RichEdit內的第一個選項還是會留著,就變成我寫入了兩個選項 1.要如何在這4個RadioButton裡頭切換也可以將寫入的內容做切換? 2.清除元件內容也一併清除RichEdit內的值?
int col = 36; // 要處理的欄位數 (Column) int row = 47; // 要處理的行數 (Row) AnsiString t1 ; if (RichEdit2->Lines->Count < row+1) { // 如果 RichEdit 行數不足 10 行 for (int i=RichEdit2->Lines->Count; i<10; i++) { RichEdit2->Lines->Add(""); // 產生足夠的空行 } } AnsiString temp = RichEdit2->Lines->Strings[row]; // 設 temp 為 RichEdit2第 row 行的內容 if(RadioButton3->Checked) { t1 = "true"; } int len1 = t1.Length(); // 設 len1 為字數 if (len1 > 0 ) { int len = temp.Length(); // 設 len 為 RichEdit1 第 row 行內容的字數 if(len < col){ // 如果資料行字元數少於 col 值,則以空白字元補足它 RichEdit2->Lines->Strings[row] = temp + AnsiString::StringOfChar(' ', col - len); temp = RichEdit2->Lines->Strings[row]; } if(len1 > 0){ t1 = "&"+t1; // 在 t1 前加上 % 符號 } temp = temp.SubString(1, col-1) + t1 +temp.SubString(col+oldlen, temp.Length()-((col+oldlen)-1)); oldlen = t1.Length(); // 設定 oldlen 為兩個 MaskEdit 內容的長度 (包含 % 符號在內) } else { temp = temp.SubString(1, col-1) + temp.SubString(col+oldlen, temp.Length()-((col+oldlen)-1)); oldlen = 0; } 我有想過在這裡加語法,判斷清除紐被按下的話,temp=""; RichEdit2->Lines->Strings[row] = temp; // 將重新組合過的字串設回給 RichEdit 第 row 行 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
Miki-lion
中階會員 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
1.
假設有RadioButton1和2, 按下RadioButton1後,再按RadioButton2不是會被切換過去嗎? 一次只會有一個RadioButton被按下。 所以在按下時RadioButton1它的資料已經寫在RichEdit了,如果切換到RadioButton2, 這個RadioButton2所寫入的內容又加了進去,但是上一個RadioButton1的內容 並不會隨著它的切換一起將剛剛寫入的東西清掉, 2.
另一個問題是我寫了ㄧ個可以同時清除4個RadioButton選取狀態的按鈕, 按下後4個RadioButton就回到未選取的狀態,但是之前寫入到RichEdit的內容不會一起被清掉(就跟第一個問題一樣) 謝謝前輩們抽空看我的問題!!
|
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |