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

關於 StringGrid 幾個問題請教各位前輩

尚未結案
arthurxu
一般會員


發表:9
回覆:8
積分:3
註冊:2003-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-07 22:55:01 IP:218.167.xxx.xxx 未訂閱
各位前輩安安,我參考了以前的討論,自已寫了個小程式如下(功能是讀取文字檔到StringGrid中與修改後回寫入檔案)    讀取部分程式碼為      TStringList *Tempfile=new TStringList;   Tempfile->LoadFromFile("Text.txt");   StringGrid->RowCount=Tempfile->Count;   for(int i=0; iCount; i ) { TStringList *Temptext=new TStringList; Temptext->CommaText=Tempfile->Strings[i]; for(int j=0; jCount; j ) { StringGrid->Cells[j][i]=Temptext->Strings[j]; } delete Temptext; } delete Tempfile; 回寫部分程式碼為 TStringList *Tempfile=new TStringList(); for (int i=0;iRowCount;i ) { String Temptxt; Temptxt=StringGrid->Cells[0][i]; for (int j=0;jColCount;j ) { Temptxt=Temptxt "," StringGrid->Cells[j 1][i]; } Tempfile->Add(Temptxt); } Tempfile->SaveToFile("Test.txt"); delete Tempfile; 基本上可以正常運作了,可是有幾個問題想請教一下各位前輩 1. 如何得知文件檔每行總共有幾個欄位,我想像程式中一樣動態指定StringGrid的ColCount 2. 如何得知目前選取記錄的 Row 值,是否有辦法一次選擇多個 Row (不連續的 Row) 3. 在回寫的時候如何將 Col 的每個欄位以定位格分開 曾經在某本書看過一句話 (記不太清楚了,可能文字有錯但意思一樣) 在程式設計的領域中,可以滿足你無限的想像空間;但是在你學會走之前,想飛想都不要想 目前我只是在學習爬行的階段,連走都走不穩 @@ 發表人 - arthurxu 於 2003/09/07 23:16:36 發表人 - arthurxu 於 2003/09/07 23:40:01
------
曾經在某本書看過一句話 (記不太清楚了,可能文字有錯但意思一樣)

在程式設計的領域中,可以滿足你無限的想像空間;但是在你學會走之前,想飛想都不要想

目前我只是在學習爬行的階段,連走都走不穩 @@

中階會員


發表:36
回覆:142
積分:70
註冊:2003-07-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-08 09:54:12 IP:211.23.xxx.xxx 未訂閱
arthurxu您好:    關於您的問題,可能會這樣處理    1. 當您用 TStingList 將檔案載入後,可任取其中之一行 Tempfile->Strings[i] 讀出後,再去做分割 例如您的文字檔是以 space 做區隔 那您也用 space 做判定字元(字串)做分割 基本上是行的通,稍微麻煩了點,請翻查BCB書的字串函數 或者讓小弟幫您處理也可,給小弟其中一行,小弟可試試    2. 這個部份有解,小弟曾看過在 StringGrid 某個欄位上點兩下 即可做出分應,就像點選 ListBox 的某行,亦能有動作 不過很抱歉,小弟對這個還不懂,還沒有機會實際操作 應該是能 double click 即可存檔 不過這裡應該有高手曉得,小弟在拋磚引玉  >> < class="code"> #include ~ OnButtonClick ~ 已知 count = 欄位,如 1
~
FILE *fp; // 宣告一個檔案
String str = "檔案回存" ; // 宣告一個回存之開頭字串
int i,j; // i = 橫向,j = 縱向 for StringGrid    fp = fopen("Text.txt","w"); // 清空原本之檔案
fprintf (fp,"%s",str); // 讀入開頭字串
fclose(fp); // 關閉檔案
str = "" ; // 讓 str 變為空字串     for (j=0;j<=StringGrid->RowCount;j  ) // 縱向
   for (i=0;i<=StringGrid->ColCount;i  ) // 橫向
     {
       str = str   StringGrid->Cells[i][j]   " "; // 最後一個就是空白
       if (StringGrid->ColCount == conut) // count 是已知的欄位總數
            { 
              fp = fopen ("Test.txt","a"); // 開啟檔案,以 a mode 加入
              fprintf (fp,"\n%s",str); 
              // 寫入 字串 於 檔案fp 中,輸入前跳一行
              // 這樣一來也能避免檔案寫到最後時,會多跳出一行空白
              str= "" ; // 再將 str 變為空字串以便重覆使用
            }
     }
 
若是部份回存,上面的 code 一樣可當參考,同等適用,就是很笨很煩 小弟也還在爬當中 :) 海匯百川,有容乃大:壁立千仞,無欲則剛 發表人 - 流 於 2003/09/08 10:29:03
arthurxu
一般會員


發表:9
回覆:8
積分:3
註冊:2003-09-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-10 00:51:36 IP:218.167.xxx.xxx 未訂閱
謝謝前輩指教ㄛ,下面是我修改過的程式碼    讀取部分    TStringList *Tempfile=new TStringList;
Tempfile->LoadFromFile("Test.txt");
StringGrid->RowCount=Tempfile->Count;
for(int i=0; iCount; i  )
  {
    TStringList *Temptext=new TStringList;
    Temptext->CommaText=Tempfile->Strings[i];
    if (StringGrid->ColCountCount) 
      StringGrid->ColCount=Temptext->Count;
    for(int j=0; jCount; j  )
      {
        StringGrid->Cells[j][i]=Temptext->Strings[j];
      }
    delete Temptext;
  }
  delete Tempfile;    先將 StringGrid 的 Col 值設成 1,然後讀取資料時再依當筆的 Count 來決定,取最多的那筆資料為準    寫入部分    TStringList *Tempfile=new TStringList();
for (int i=0;iRowCount;i  )
  {
    String Temptxt,Length;
    Temptxt=StringGrid->Cells[0][i];
    for (int j=0;jColCount;j  )
      {
        if (jColCount)
          {
            if (StringGrid->Cells[j][i].Length()<8)
              Temptxt=Temptxt "\t\t" StringGrid->Cells[j 1][i];
            else  Temptxt=Temptxt "\t" StringGrid->Cells[j 1][i];
          }
      }
      Temptxt=Temptxt.TrimRight();
      Tempfile->Add(Temptxt);
  }
Tempfile->SaveToFile("Test.txt");
delete Tempfile;
因為我預設將資料最大值為 8 個中文字,然後讀取 Col 時先判斷字串是否大於 4 個中文字,再以 \t 去定位,然後以字串相加的方法,讀完 1 個 Row 後,再將字串寫入 ( @@ 可是假如有某個欄位大於 8 個中文字 就對不準了) 在此先謝謝 流大 的指導 您的回答 讓我有個方向去思考怎麼做 至於原本的第二個問題,我還是找不到怎麼做 @@ 曾經在某本書看過一句話 (記不太清楚了,可能文字有錯但意思一樣) 在程式設計的領域中,可以滿足你無限的想像空間;但是在你學會走之前,想飛想都不要想 目前我只是在學習爬行的階段,連走都走不穩 @@
------
曾經在某本書看過一句話 (記不太清楚了,可能文字有錯但意思一樣)

在程式設計的領域中,可以滿足你無限的想像空間;但是在你學會走之前,想飛想都不要想

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