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

MEMO裡如何取出我要的文字加到陣列

答題得分者是:st33chen
luckhy
一般會員


發表:11
回覆:17
積分:5
註冊:2009-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-13 23:08:31 IP:203.79.xxx.xxx 訂閱
元件只有各一個MEMO、LABEL、BUTTON
MEMO裡的內容如下:
? 1 廠牌 衣服型號 WC3 - H Y 國家 0 E 6 R
這是從系統畫面抓下來貼上的
只有廠牌、衣服型號、國家是會改變
其他空格文字符號不會變
但廠牌和型號字串會有中英文
如何將廠牌、衣服型號、國家加到陣列
輸出到LABEL
謝謝
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-14 14:07:08 IP:122.116.xxx.xxx 未訂閱
您好,

這題應該是單純的如何切字串的問題,
但, 不單純的地方
我覺得應該是

廠牌(及衣服型號)的真正的字串中有無空格 ( 例如 廠牌是 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-14 17:54:49 IP:203.79.xxx.xxx 訂閱
感謝有人回覆
目前廠牌、型號、國家都不會有空格
請問要如何用空格來切字串呢?
因為剛上手,請麻煩協助在幫忙,謝謝您。
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-08-15 06:59:03 IP:122.116.xxx.xxx 未訂閱
您好,

若 廠牌、衣服型號、國家 的真實字串皆無空格
那我的作法是(當然有別的解法) :

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 (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-08-15 07:00:42, 註解 無‧
st33chen 重新編輯於 2009-08-15 07:01:56, 註解 無‧
st33chen 重新編輯於 2009-08-15 17:14:28, 註解 無‧
st33chen 重新編輯於 2009-08-15 17:15:08, 註解 無‧
luckhy
一般會員


發表:11
回覆:17
積分:5
註冊:2009-08-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-08-15 23:11:13 IP:203.79.xxx.xxx 訂閱
謝謝大哥
在請問一下大哥
我的想法是能不能用字元來辨判加到陣列
例如
? 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-08-17 08:42:38 IP:122.116.xxx.xxx 未訂閱
您好,

一 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 (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-08-17 10:22:34, 註解 無‧
st33chen 重新編輯於 2009-08-18 20:19:32, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-08-17 10:19:08 IP:203.75.xxx.xxx 未訂閱
真是絕妙好計呀!
受教了!又學了一招

趕快來抄下先
純路過,請繼續
===================引 用 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 中 兩個 < 間無空格
系統時間:2024-04-25 19:31:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!