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

如何將StringGrid的兩各Cols 用SaveToFile 存成同一各檔案?

答題得分者是:dllee
a0815
一般會員


發表:4
回覆:5
積分:1
註冊:2007-08-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-24 18:29:28 IP:59.125.xxx.xxx 訂閱
各位先進大家好! 請問如何將StringGrid1的Cols[0]跟Cols[1] 存成同一檔案?(已爬文沒有找到類似的)  而檔案的內容希望如下,比較好區別(若Cols[0]=0~5,Cols[1]=a~e) 1,a 2,b 3,c 4,d 5,e  我目前的程式如下:(只能存Cols[1]) 


SaveDialog1->Title="Save LCD Registers To File ";
if(SaveDialog1->Execute())
{
StringGrid1->Cols[1]->SaveToFile(SaveDialog1->FileName);
}
編輯記錄
dllee 重新編輯於 2007-08-24 18:49:09, 註解 修改分類‧
dllee 重新編輯於 2007-08-24 18:50:09, 註解 無‧
dllee 重新編輯於 2007-08-24 18:51:25, 註解 實在是太難改了!!!‧
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-24 18:46:52 IP:59.105.xxx.xxx 訂閱
TStringList *file=new TStingList;
int count=StringGrid1->RowCount;
for(int i=0;i<count;i )
file->Add(StringGrid1->Cols[0] ","
StringGrid1->Cols[1]);
file->SaveToFile("ABC.csv");
delete file;

利用此法,如果有更多 Cols 也可以使用。
------
http://www.ViewMove.com
membermember
一般會員


發表:1
回覆:2
積分:0
註冊:2007-02-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-24 19:59:16 IP:125.231.xxx.xxx 訂閱
請多多指教^^ <textarea class="cpp" rows="10" cols="60" name="code">#include using namespace std; #define iColCount 4 #define iRowCount 1 void __fastcall TForm1::Button1Click(TObject *Sender) { SaveDialog1->Filter = "純文字文件( *.txt ) | *.txt"; SaveDialog1->DefaultExt = ".txt"; if(SaveDialog1->Execute()) { fstream File; File.open( SaveDialog1->FileName.c_str(), ios::out ); for( int iCol = 0 ; iCol <= iColCount ; iCol ) { for( int iRow = 0 ; iRow <= iRowCount ; iRow ) { File << StringGrid1->Cells[iRow][iCol].c_str(); if( iRow == 1 ) { File << "\n"; } else { File << ", "; } } } File.close(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::SaveDialog1CanClose(TObject *Sender, bool &CanClose) { if ( FileExists( SaveDialog1->FileName SaveDialog1->DefaultExt ) ) { int MsgRlt = MessageBox( SaveDialog1->Handle, "檔案已存在,是否覆蓋?", "MessageBox", MB_YESNO ); switch( MsgRlt == IDNO ) { case true:// MsgRlt == IDNO 不覆蓋檔案 CanClose = false; break; case false:// MsgRlt == IDYES 覆蓋檔案 break; } } } </textarea>
a0815
一般會員


發表:4
回覆:5
積分:1
註冊:2007-08-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-30 18:07:09 IP:59.125.xxx.xxx 訂閱

dllee板大:
原本使用COL的方式似乎不行 改成以下的就可以了
Cells 跟COL 不知道差在哪邊?~~

TStringList *file=new TStringList;
int count=StringGrid1->RowCount;


for(int i=0;i file->Add(StringGrid1->Cells[0][i] "=" StringGrid1->Cells[1][i]);

file->SaveToFile(SaveDialog1->FileName);
delete file;


===================引 用 dllee 文 章===================
TStringList *file=new TStingList;
int count=StringGrid1->RowCount;
for(int i=0;i<count;i )
?? file->Add(StringGrid1->Cols[0] ","
StringGrid1->Cols[1]);
file->SaveToFile("ABC.csv");
delete file;

利用此法,如果有更多 Cols 也可以使用。
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-30 21:01:30 IP:59.105.xxx.xxx 訂閱
哈哈... 因為我偷懶, 沒用 BCB 直接打出來, 沒有語法檢查 

TStringList *file=new TStingList;
int count=StringGrid1->RowCount;
for(int i=0;i<count;i )
file->Add(StringGrid1->Cols[0]->Strings[i] ","
StringGrid1->Cols[1]->Strings[i]);
file->SaveToFile("ABC.csv");
delete file;


加上 Strings[i] 才會是對的。

Cells[i][j] 與 Cols[i]->Strings[j] 是一樣的,因為看到您一開始用了 Cols[] 才想說用 Cols 作說明, 但沒注意到漏寫了 Strings[]

其實, 網路上找一找, 應該可以找到 TStringGrid 轉 csv 的函式或元件
------
http://www.ViewMove.com
a0815
一般會員


發表:4
回覆:5
積分:1
註冊:2007-08-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-09-03 13:53:37 IP:59.125.xxx.xxx 訂閱
dllee版大: 以下是我在站上找到的 LOAD的CODE 是可以正常運作,不過令我不解的是 slCol->CommaText = slRow->Strings[row]; ( "slRow->Count"的值是怎算出來的?"slCol->CommaText"又怎分割置字串?用逗號跟換行符號去分嗎? 查HELP看的霧煞煞~ ) 再麻煩您了~ TKS~ <textarea class="cpp" rows="10" cols="60" name="code"> slRow->LoadFromFile(OpenDialog1->FileName); // 將 OpenDialog 之 FileName 指向的檔案內容載至 slRow 內 for (int row=0; rowCount; row ) // slRow->Count 值為讀入的資料行總數 { slCol->CommaText = slRow->Strings[row]; // CommaText 可將字串內以空白字元或是逗號分隔的資料 //拆解成不同的資料行 for (int col=0; colCount; col ) // slCol->Count 值為拆解後的資料數量 StringGrid1->Cells[col][row] = slCol->Strings[col]; // 依序將資料填入第 row 1 行的第 col 1 欄內</textarea>
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-09-03 18:58:25 IP:59.105.xxx.xxx 訂閱
slRow->LoadFromFile(OpenDialog1->FileName);
slRow 是一個 TStringList ,LoadFromFile 就是把檔案載入 TStringList 以分行符號分出每個字串。

slCol->CommaText = slRow->Strings[row];
slCol 也是一個 TStringList,slRow->Strings[row] 就是檔案第 row 行的資料放入一個 TStringList
CommaText 表示使用 , 逗號分隔,如 abc,def,124 這樣一行就可分 3 個字串放入 TStringList 內。

StringGrid1->Cells[col][row] = slCol->Strings[col]
把 slCol 放入 StringGrid1 內。

Online Help 看不懂,就直接把範例拿來單步除錯,查看每一行的內容,
看久了就懂了。

現成的程式碼很多,試著去跑跑看,單步除錯看變數的變化或元件內屬性的變化,
才能更了解元件要如何使用。
不練習,看再多也沒用,不練習,聽再多也沒用。

所以,請多練習,有問題再發問。
------
http://www.ViewMove.com
ALTIS
初階會員


發表:4
回覆:26
積分:31
註冊:2005-04-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-01-19 09:03:22 IP:61.218.xxx.xxx 訂閱
ringList;

第一行
少了一個 r 喔.



===================引 用 dllee 文 章===================
哈哈... 因為我偷懶, 沒用 BCB 直接打出來, 沒有語法檢查

TStringList *file=new TStingList;
int count=StringGrid1->RowCount;
for(int i=0;i<count;i )
file->Add(StringGrid1->Cols[0]->Strings[i] ","
StringGrid1->Cols[1]->Strings[i]);
file->SaveToFile("ABC.csv");
delete file;


加上 Strings[i] 才會是對的。

Cells[i][j] 與 Cols[i]->Strings[j] 是一樣的,因為看到您一開始用了 Cols[] 才想說用 Cols 作說明, 但沒注意到漏寫了 Strings[]

其實, 網路上找一找, 應該可以找到 TStringGrid 轉 csv 的函式或元件
------
城市讓人迷惘 我在湖岸看見希望
妳的眼神是一道光芒 開啟我心中的收藏
系統時間:2024-04-27 10:11:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!