MEMO裡如何取出我要的文字加到陣列 |
答題得分者是:st33chen
|
luckhy
一般會員 發表:11 回覆:17 積分:5 註冊:2009-08-09 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
這題應該是單純的如何切字串的問題, 但, 不單純的地方 我覺得應該是 廠牌(及衣服型號)的真正的字串中有無空格 ( 例如 廠牌是 HXNG TXN 有空格, HXNGTXN 則無空格 ) 如果有可就很難切, 因為 廠牌 衣服型號 字串中的各個字會有很多種組合方式 ( 舉例, 廠牌 是 AAA 台灣 衣服型號是 BBB FOR GIRL123 那看到的是 AAA 台灣 BBB FOR GIRL123 即使是人工, 若沒有其他條件, 根本無法區分 廠牌 衣服型號 各是哪幾個字 ) 如果廠牌及衣服型號的字串中都沒有空格 那就用 空格去切出 廠牌 及 衣服型號 用固定字 WC3 - H Y 及 0 E 6 R 去切出 國家
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
luckhy
一般會員 發表:11 回覆:17 積分:5 註冊:2009-08-09 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
若 廠牌、衣服型號、國家 的真實字串皆無空格 那我的作法是(當然有別的解法) : TStringList* mylist = new TStringList; // 設一個 stringlist 用來切字串 astr = "? 1 廠牌 衣服型號 WC3 - H Y 國家 0 E 6 R "; astr = stringreplace(astr, "WC3 - H Y", "",TReplaceFlags()< < rfReplaceAll); // 刪掉讀到字串中的固定字串 WC3 - H Y while (pos(" ", astr)>0) astr = stringreplace(astr, " ", " ", TReplaceFlags() < < rfReplaceAll); // 字串中所有兩個空格變成一個空格 mylist->strings->text = stringreplace(trim(astr)," ","\n",TReplaceFlags() < < rfReplaceAll); // 切字串 廠牌 = mylist->strings[2]; 衣服型號 = mylist->strings[3]; 國家 = mylist->strings[4]; 註 : bcb語法我不是記得很清楚, 若有錯請自行修正 TReplaceFlags() < < rfReplaceAll 中 兩個 < 間無空格
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
luckhy
一般會員 發表:11 回覆:17 積分:5 註冊:2009-08-09 發送簡訊給我 |
謝謝大哥
在請問一下大哥 我的想法是能不能用字元來辨判加到陣列 例如 ? 1 LV 3110CDE WE3 - R Y JAPAN 0 E 6 R MODEL[0]=Memo1->Lines->Strings[0].c_str()[6]; MODEL[1]=Memo1->Lines->Strings[0].c_str()[7]; 但要如何判斷取的字元是否為空白 我之前只會用dev-c寫讀TXT檔 但BCB最近開始學,不能如何做判斷,麻煩告知 fpr=fopen("data.txt","r"); if(fpr!=NULL) { ch=fgetc(fpr); if(ch=='L') { b=0; while((ch=fgetc(fpr))!=' ') { MODEL[b]=ch; b ; } |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
一 char 一 char 讀(恕我稱之為舊法)也可以, 假設 ? 1 LV 3110CDE WE3 - R Y JAPAN 0 E 6 R 中 ? 存到 model[0] 1 存到 model[1] LV 存到 model[2] 3110CDE 存到 model[3] WE3 存到 model[4] - 存到 model[5] R 存到 model[6] Y 存到 model[7] JAPAN 存到 model[8] ... 邏輯上變成 1. 設一變數 astr 用來存每兩個空格間的字 另一變數 nn 用來存第n個字 2. astr = ""; nn = 0; 3. while 讀入一字 到 ch 4. if (ch==" ") { 若 astr<>"" 把 astr 存到 model[nn]; astr=""; nn ; } else if (ch== #13) 做換列處理 else if (ch== #10) 做換列處理 else astr = astr ch; // 字串 concat 是用 嗎 ? 忘了 5. end while 新舊法都可以達到目的, 但舊法許多事要自己寫 code 處理 另一作法是 : 1. 以 readln 讀入一筆到一個字串 astr 2. 用 ii = pos('" ", astr) ; 判斷 第一個空格所在的 char 數 3. 用 copy(astr, 1, ii) 切出第一個 字 4. 用 astr = copy(astr, ii 1,1000) 5. 重覆 2-4, 直到切出 國家 欄 6. 重覆 1-5 直到金讀完所有字串
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
真是絕妙好計呀!
受教了!又學了一招 趕快來抄下先 純路過,請繼續 ===================引 用 st33chen 文 章=================== 您好, 若 廠牌、衣服型號、國家 的真實字串皆無空格 那我的作法是(當然有別的解法) : [code cpp] TStringList* mylist = new TStringList; // 設一個 stringlist 用來切字串 astr = "? 1 廠牌 衣服型號 WC3 - H Y 國家 0 E 6 R "; astr = stringreplace(astr, "WC3 - H Y", "",TReplaceFlags()< < rfReplaceAll); // 刪掉讀到字串中的固定字串 WC3 - H Y while (pos(" ", astr)>0) astr = stringreplace(astr, " ", " ", TReplaceFlags() < < rfReplaceAll); // 字串中所有兩個空格變成一個空格 mylist->strings->text = stringreplace(trim(astr)," ","\n",TReplaceFlags() < < rfReplaceAll); // 切字串 廠牌 = mylist->strings[2]; 衣服型號 = mylist->strings[3]; 國家 = mylist->strings[4]; [/code] 註 : bcb語法我不是記得很清楚, 若有錯請自行修正 TReplaceFlags() < < rfReplaceAll 中 兩個 < 間無空格 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |