線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1849
推到 Plurk!
推到 Facebook!

txt檔讀取後抓進表格中

答題得分者是:s92405054
WatsonJ
一般會員


發表:2
回覆:5
積分:1
註冊:2012-08-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-08-23 17:25:06 IP:140.115.xxx.xxx 訂閱
 之前未學過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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-08-24 09:06:21 IP:60.248.xxx.xxx 訂閱

先回答你一個問題...其實你可以直接用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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-08-24 14:20:37 IP:140.115.xxx.xxx 訂閱
 可是我的問題還是卡在只用TStringList讀檔後,我下一步蒐尋的語法到底該用哪種方式?

像例子那樣由於蘋果48、50編號不依 所以我有沒有辦法設定起始點說從品名:下一個字開始、結束點在等級的前面 類似這樣的語法。

不過還是謝謝您的回覆
WatsonJ
一般會員


發表:2
回覆:5
積分:1
註冊:2012-08-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-08-26 15:48:15 IP:114.32.xxx.xxx 訂閱
請問有人可以幫我看一下問題出在哪嗎??
我現在利用 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-08-26 16:13:39 IP:114.32.xxx.xxx 訂閱
 我找到了!!  可以利用  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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2012-08-27 10:09:31 IP:60.248.xxx.xxx 訂閱
或許你要先去看一下書.... = =你的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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2012-08-27 12:55:10 IP:114.32.xxx.xxx 訂閱
因為之前看書他說 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2012-08-27 22:06:35 IP:114.32.xxx.xxx 訂閱
雖然學會了,赫然發現加上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;
}
}

謝謝您。
系統時間:2017-12-12 5:02:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!