txt檔讀取後抓進表格中 |
答題得分者是:s92405054
|
WatsonJ
一般會員 發表:2 回覆:5 積分:1 註冊:2012-08-23 發送簡訊給我 |
之前未學過C++,所以這次的作業想破頭還是一直無法成功,現在有很多txt檔案,格式幾乎都一樣,每一個都在同一行上,希望將文字檔叫進後可以便表格
原始資料類似 第一個檔案 品名:蘋果50 等級:5 日期:2013/03/05 第二個 品名:蘋果58 等級:2 日期:2010/05/08 我現在要將例如品名 等集 這些在檔案叫進去時都變到表格以供查詢 上網和看書找了很久,不知道要怎麼馬上叫進去 所以我就想說先用 RichEdit1讀檔後再叫進去 StringGrid1 我現在就是先開檔的時候 RichEdit1 已可以顯示 StringGrid1 我先把知道的分類列在表格上 但現在卡在不知道如何蒐尋,是要用for迴圈去搜尋那個 RichEdit1 的line嗎? 那如果搜尋到後因為是整行 我怎麼select我要的範圍? void __fastcall TForm1::Open1Click(TObject *Sender) { if(OpenDialog1->Execute()) { RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); StringGrid1->Cells[0][1]= "PRODUCT" ; //卡在這邊 TStringList *sl1 = new TStringList(); StringGrid1->Cells[1][1]=sl1-> } } 拜託教導我一下 還有我想請問一下我看一本書他不是bcb是c 的, 他有時候會在主程式之前先定義一些參數 例如void String(char*a *b) {//定義} 之後再主程式這邊 void main() {//可能會用到剛剛定義的東西} 可是我一直無法嘗試用這種方式,每次系統都不給我跑 void String 那裏就停滯住了,想請問bcb和c 撰寫程式的差別在哪? |
s92405054
高階會員 發表:7 回覆:49 積分:101 註冊:2009-04-07 發送簡訊給我 |
先回答你一個問題...其實你可以直接用TStringList讀資料...除非你要顯示你讀出來的資料...不然其實可以不用用RichEdit 在來BCB跟C 有何差別....其實我只知道C 是種程式語言..BCB對我來說是一個編輯軟體它符合C 的語法....(我的想法啦有誤請指教) ===================引 用 WatsonJ 文 章=================== 之前未學過C ,所以這次的作業想破頭還是一直無法成功,現在有很多txt檔案,格式幾乎都一樣,每一個都在同一行上,希望將文字檔叫進後可以便表格 原始資料類似 第一個檔案 品名:蘋果50 等級:5 日期:2013/03/05 第二個 品名:蘋果58 等級:2 日期:2010/05/08 我現在要將例如品名 等集 這些在檔案叫進去時都變到表格以供查詢 上網和看書找了很久,不知道要怎麼馬上叫進去 所以我就想說先用 RichEdit1讀檔後再叫進去 StringGrid1 我現在就是先開檔的時候 RichEdit1 已可以顯示 StringGrid1 我先把知道的分類列在表格上 但現在卡在不知道如何蒐尋,是要用for迴圈去搜尋那個 RichEdit1 的line嗎? 那如果搜尋到後因為是整行 我怎麼select我要的範圍? void __fastcall TForm1::Open1Click(TObject *Sender) { if(OpenDialog1->Execute()) { RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); StringGrid1->Cells[0][1]= "PRODUCT" ; //卡在這邊 TStringList *sl1 = new TStringList(); StringGrid1->Cells[1][1]=sl1-> } } 拜託教導我一下 還有我想請問一下我看一本書他不是bcb是c 的, 他有時候會在主程式之前先定義一些參數 例如void String(char*a *b) {//定義} 之後再主程式這邊 void main() {//可能會用到剛剛定義的東西} 可是我一直無法嘗試用這種方式,每次系統都不給我跑 void String 那裏就停滯住了,想請問bcb和c 撰寫程式的差別在哪? |
WatsonJ
一般會員 發表:2 回覆:5 積分:1 註冊:2012-08-23 發送簡訊給我 |
|
WatsonJ
一般會員 發表:2 回覆:5 積分:1 註冊:2012-08-23 發送簡訊給我 |
請問有人可以幫我看一下問題出在哪嗎?? 我現在利用 AnsiString 搜尋,但不知道發生什麼事情,程式執行後,load黨進去會一直呈現跑不動的狀態, 我想問我程式是否出現錯誤? 第二個就是因為pos是搜尋那一個字串,搜尋到後從1開始數,但我的txt黨之後會依些重複的字串, 想問有沒有方法是可以先取出第一行在進行搜尋,貼上表格這些動作。 謝謝大家~ void __fastcall TForm1::Open1Click(TObject *Sender) { if(OpenDialog1->Execute()) { RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); StringGrid1->Cells[0][1]= "PRODUCT" ; AnsiString str1 = RichEdit1->Lines->Text; int Pos = str1.Pos("FORMOSAT"); while(Pos>0) { StringGrid1->Cells[1][1] = str1.SubString(1,43); } } }; ===================引 用 WatsonJ 文 章===================之前未學過C ,所以這次的作業想破頭還是一直無法成功,現在有很多txt檔案,格式幾乎都一樣,每一個都在同一行上,希望將文字檔叫進後可以便表格 原始資料類似 第一個檔案 品名:蘋果50 等級:5 日期:2013/03/05 第二個 品名:蘋果58 等級:2 日期:2010/05/08 我現在要將例如品名 等集 這些在檔案叫進去時都變到表格以供查詢 上網和看書找了很久,不知道要怎麼馬上叫進去 所以我就想說先用 RichEdit1讀檔後再叫進去 StringGrid1 我現在就是先開檔的時候 RichEdit1 已可以顯示 StringGrid1 我先把知道的分類列在表格上 但現在卡在不知道如何蒐尋,是要用for迴圈去搜尋那個 RichEdit1 的line嗎? 那如果搜尋到後因為是整行 我怎麼select我要的範圍? void __fastcall TForm1::Open1Click(TObject *Sender) { if(OpenDialog1->Execute()) { RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); StringGrid1->Cells[0][1]= "PRODUCT" ; //卡在這邊 TStringList *sl1 = new TStringList(); StringGrid1->Cells[1][1]=sl1-> } } 拜託教導我一下 還有我想請問一下我看一本書他不是bcb是c 的, 他有時候會在主程式之前先定義一些參數 例如void String(char*a *b) {//定義} 之後再主程式這邊 void main() {//可能會用到剛剛定義的東西} 可是我一直無法嘗試用這種方式,每次系統都不給我跑 void String 那裏就停滯住了,想請問bcb和c 撰寫程式的差別在哪? |
WatsonJ
一般會員 發表:2 回覆:5 積分:1 註冊:2012-08-23 發送簡訊給我 |
我找到了!! 可以利用 TStringList 的 Strings 進行讀行功能,所以我也將成程式作變動了!!!!
不過我依然遇到一樣的問題就是RUN程式的時候,一直呈現卡蛋狀態,拜託大家快幫我看看!!! 拜託~~~~~謝謝大家 void __fastcall TForm1::Open1Click(TObject *Sender) { if(OpenDialog1->Execute()) { RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); StringGrid1->Cells[0][1]= "PRODUCT" ; TStringList *sl1 = NULL; sl1 = new TStringList(); //還有我不太懂這兩行 如果我今天濃縮成一行TStringList *sl1 = new TStringList(); 差別在哪裡?? sl1->LoadFromFile(OpenDialog1->FileName); AnsiString str1 = sl1->Strings[5]; int Pos = str1.Pos("FORMOSAT"); while(Pos>0) { StringGrid1->Cells[1][1] = str1.SubString(1,9); } } }; |
s92405054
高階會員 發表:7 回覆:49 積分:101 註冊:2009-04-07 發送簡訊給我 |
或許你要先去看一下書.... = =你的while非常有問題.....
===================引 用 WatsonJ 文 章=================== 我找到了!! 可以利用 TStringList 的 Strings 進行讀行功能,所以我也將成程式作變動了!!!! 不過我依然遇到一樣的問題就是RUN程式的時候,一直呈現卡蛋狀態,拜託大家快幫我看看!!! 拜託~~~~~謝謝大家 void __fastcall TForm1::Open1Click(TObject *Sender) { if(OpenDialog1->Execute()) { RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); StringGrid1->Cells[0][1]= "PRODUCT" ; TStringList *sl1 = NULL; sl1 = new TStringList(); //還有我不太懂這兩行 如果我今天濃縮成一行TStringList *sl1 = new TStringList(); 差別在哪裡?? 沒差別,但是你new了記得delete sl1->LoadFromFile(OpenDialog1->FileName); AnsiString str1 = sl1->Strings[5]; int Pos = str1.Pos("FORMOSAT"); while(Pos>0) 如果你的Pos沒改變又一直大於0你的while豈不是跑不出來了(就這段語法來看啦) { StringGrid1->Cells[1][1] = str1.SubString(1,9); } } };
編輯記錄
s92405054 重新編輯於 2012-08-26 20:13:15, 註解 無‧
|
WatsonJ
一般會員 發表:2 回覆:5 積分:1 註冊:2012-08-23 發送簡訊給我 |
因為之前看書他說 while 和IF差不多,剛剛查完書後,懂您說的意思了,我忽略掉把它終止迴圈,原來他們還是有差別的,謝謝你。
===================引 用 s92405054 文 章=================== 或許你要先去看一下書.... = =你的while非常有問題..... ===================引 用 WatsonJ 文 章=================== 我找到了!! 可以利用 TStringList 的 Strings 進行讀行功能,所以我也將成程式作變動了!!!! 不過我依然遇到一樣的問題就是RUN程式的時候,一直呈現卡蛋狀態,拜託大家快幫我看看!!! 拜託~~~~~謝謝大家 void __fastcall TForm1::Open1Click(TObject *Sender) { if(OpenDialog1->Execute()) { RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); StringGrid1->Cells[0][1]= "PRODUCT" ; TStringList *sl1 = NULL; sl1 = new TStringList(); //還有我不太懂這兩行 如果我今天濃縮成一行TStringList *sl1 = new TStringList(); 差別在哪裡?? 沒差別,但是你new了記得delete sl1->LoadFromFile(OpenDialog1->FileName); AnsiString str1 = sl1->Strings[5]; int Pos = str1.Pos("FORMOSAT"); while(Pos>0) 如果你的Pos沒改變又一直大於0你的while豈不是跑不出來了(就這段語法來看啦) { StringGrid1->Cells[1][1] = str1.SubString(1,9); } } }; |
WatsonJ
一般會員 發表:2 回覆:5 積分:1 註冊:2012-08-23 發送簡訊給我 |
雖然學會了,赫然發現加上while好像沒有什麼幫助,所以我就刪掉了,不過我又卡到一個新問題, SubString(起始位置,長度),
本來想說用這樣就好了,結果我沒注意有些字串它的長度其實是不一樣的,所以後面那個長度是否可以改成我抓到某一個字串的前面或是抓到我指定的字串停止? void __fastcall TForm1::Open1Click(TObject *Sender) { if(OpenDialog1->Execute()) { RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); StringGrid1->ColWidths[1]=300; StringGrid1->Cells[0][1]= "PRODUCT" ; TStringList *sl1 = NULL; sl1 = new TStringList(); sl1->LoadFromFile(OpenDialog1->FileName); AnsiString str1 = sl1->Strings[5]; StringGrid1->Cells[1][1] = Trim(str1.SubString(str1.Pos(" "),47)); 我把它變成我先尋找第一個空值為我的啟始位置,可是後面我原本想跟前面一樣用.pos的方式,不過發現好像會出錯?請問有其他的好辦法嗎? delete sl1,str1; } } 謝謝您。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |