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

我要如何做才能抓到txt檔的數字

答題得分者是:RedSnow
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-30 10:47:47 IP:220.130.xxx.xxx 未訂閱
螢幕尺寸為1280*1024 請問我要怎麼寫,才能抓到txt檔中以數字排列成的2個圓形。我現在要將2個圓形的相對位置做相加.. Report Name : ABxxxx.x-x-xx Title : XXXX XXX XXX XX-XXX-XXXX XX:XX:XX page : X ************************************************************************************************************************************ Product Name : OVxxxx-Tx Tester Name : Txxxx LOT No. : FHxxxx.x Wafer No. : xx Start Time : xxxx-xx-xx-xx:xx:xx End Time : xxxx-xx-xx-xx:xx:xx Operator ID : xxxxxxx Test Program : TMLxxx_Tx_Rx_Xx_VGA.tp Probe Card : Pxxxx-xxxx Load Board : PBxxx-xxxx Gross Die : xxx . 1 1 1 1 1 1 1 30 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 4 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 15 1 1 1 1 1 1 1 1 1 1 11 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 1 1 1 1 1 3 . 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 1 1 1 1 1 15 1 . 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 20 1 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 3 1 1 15 1 1 1 15 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 . 1 1 1 1 1 1 1 15 1 1 1 1 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 15 . 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 15 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 1 9 1 1 1 1 1 1 1 15 . 1 1 1 1 1 1 1 1 1 1 1 1 3 6 1 26 1 1 1 1 1 1 1 1 1 1 1 4 1 1 1 4 1 9 1 15 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 3 . 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 1 1 1 27 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 6 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 3 1 3 . 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 26 1 1 15 1 . 2 1 3 1 1 15 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 1 6 5 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 . 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 3 0 1 1 1 3 3 3 3 3 1 3 1 1 ..:..............:..............:..............:..............:..............:..............:..............: 0 5 10 15 20 25 30 35 Report Name : ABxxxx.x-x-xx Title : XXXX XXX XXX XX-XXX-XXXX XX:XX:XX page : X ************************************************************************************************************************************ Product Name : AAxxxx-AA Tester Name : Axxxx LOT No. : AAxxxx.x Wafer No. : xx Start Time : xxxx-xx-xx-xx:xx:xx End Time : xxxx-xx-xx-xx:xx:xx Operator ID : xxxxxxx Test Program : AAAxxx_Tx_Ax_Xx_AAA.tp Probe Card : Pxxxx-xxxx Load Board : PBxxx-xxxx Gross Die : xxx . 1 1 1 1 1 1 1 30 1 1 1 15 1 9 1 1 1 1 1 1 1 14 . 1 1 1 1 1 1 26 15 1 1 1 1 6 1 1 1 1 6 . 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 15 1 1 1 1 1 1 1 1 1 1 1 9 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 15 1 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 . 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 26 1 9 1 1 1 1 14 1 . 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9 1 1 1 1 1 1 14 3 15 20 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 . 1 1 1 1 1 1 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 3 . 1 9 1 1 1 1 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 1 1 1 1 1 15 28 1 1 1 1 1 1 1 1 15 1 1 1 1 1 1 1 15 1 1 1 1 1 1 . 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 1 1 1 1 1 15 1 1 1 1 . 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 1 6 1 1 1 1 1 . 1 1 1 15 15 15 1 1 1 1 1 15 1 1 1 1 1 1 6 15 1 1 1 15 1 1 1 1 1 5 1 1 1 1 1 1 1 1 1 1 1 15 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 2 . 1 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 6 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 2 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 3 1 3 1 1 1 1 6 ..:..............:..............:..............:..............:..............:..............:..............: 0 5 10 15 20 25 30 35
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-30 14:15:24 IP:210.69.xxx.xxx 未訂閱
宣告 3 個 1280*1024 陣列, 前兩個放原來的資料 用迴圈去將相對位置的資料抓出相加, 放入第 3 個陣列 ********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-30 16:52:52 IP:220.130.xxx.xxx 未訂閱
你好:其實我現在的問題就是如何只抓數字進去陣列,檔案的名稱、日期...等 不要抓進去陣列中,謝謝
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-30 18:31:43 IP:61.66.xxx.xxx 未訂閱
iii0628你好: 我就你舉的例來說 你只要每行第一個字是英文字的那一行都不讀吧 所以你可以一行一行讀進來 當讀進來的那一行如果第一個字是英文 就跳到下一行繼續讀 如果非英文 那就存到陣列 至於.的這一種,我不知道你打算如何處理 就不猜測了
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-01 11:13:02 IP:220.130.xxx.xxx 未訂閱
你好:我現在是想把TXT的內容放在StringGrid元件上再進行相加,不過前一個步驟就是要先將"英文字母"和"."去掉,只是要怎麼做才可以將"英文字母"和"."去掉只留下2個以數字排成的圓形...謝謝    我目前寫這樣的話,只能在txt檔案中都是數字下,才能WORK
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
   int i=0, j=0,x=0,y=0;
   int iArray[1224][1624];
   AnsiString sz;
   TStringList *sl1=NULL;
   TStringList *sl2=NULL;     if (OpenDialog1->Execute())
 {
      sl1=new TStringList;
      sl1->LoadFromFile(OpenDialog1->FileName);
   for(i=0; iCount; i  )
   {
      sl2=new TStringList;
      sz=StringReplace(sl1->Strings[i], " ", ",", TReplaceFlags()<CommaText=sz;
      sz="";
      for(j=0; jCount; j  )
      {
         iArray[i][j]=StrToInt(sl2->Strings[j]);
                        
         StringGrid1->Cells[x][y]=(IntToStr(iArray[i][j]));
      }
      delete sl2;
   }
   delete sl1;          }
   }
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-01 13:02:37 IP:61.66.xxx.xxx 未訂閱
iii0628你好: 你如果要只要抓數字 最簡單的方法就是你把每一行都讀進來 然後一個字元一個字元作判斷 如果是0~9的數字,又把它存到一個新的陣列 在用新的陣列來運算就好了
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-01 15:31:47 IP:218.19.xxx.xxx 未訂閱
iii0628 您好:    因為您未說明一些其它的相關細節 (資料是否像您貼上來的一樣,都是固定格式?加號的處理?句號是否有其它作用?),因此我依據您貼上來的資料,單純的將您的程式修改如下,如此可過濾掉以文字開頭的資料行,同時將句號與加號直接清除掉,如果句號與加號有其它作用的話,請您依據需要自行修改處理過程:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
    int i=0, j=0,x=0,y=0;
    int iArray[256][256];
    AnsiString sz;
    TStringList *sl1 = NULL;
    TStringList *sl2 = NULL;
    AnsiString nStr = ".0123456789";        if (OpenDialog1->Execute()) {
        sl1 = new TStringList;
        sl1->LoadFromFile(OpenDialog1->FileName);
        for (i=0; iCount; i  ) {
            if(nStr.Pos(sl1->Strings[i].c_str()[0]) > 0){
                sl2 = new TStringList;
                sz = StringReplace(sl1->Strings[i], ". ", "", TReplaceFlags()<CommaText = sz;  // 無需將空格代換成逗號,一樣可直接交由 CommaText 使用
                sz = "";
                for (j=0; jCount; j  ) {
                    iArray[i][j] = StrToInt(sl2->Strings[j]);
                    StringGrid1->Cells[x][y] = (IntToStr(iArray[i][j]));
                }
                delete sl2;
            }
        }
        delete sl1;
    }
}
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-01 16:00:17 IP:220.130.xxx.xxx 未訂閱
RedSnow你好:謝謝你的回應,不好意思我沒說清楚我這個程式的功能,我現在)""只要將2個以數字排列出來的圓形貼到StringGrid元件上""(要按照排列出來的圓形位置貼上)其他東西都要刪掉。再將2個圓形的相對位置做相加之後產生另外一個新的圓形出來 之後再連結到EXCEL中做分析(這一部份我已經寫好了) 另外最左邊第一行的.30 ....25 ....20 ....15 ....10 ....5 ....0 (這是Y座標)都要刪掉 再下列是 ..:..............:..............:..............:..............:..............:..............:..............: 0 5 10 15 20 25 30 35 也要刪掉(這是X座標) 你修改過的程式,跑出來沒有任何結果勒..
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-01 18:09:27 IP:218.19.xxx.xxx 未訂閱
iii0628 您好:    您所說的 "跑出來沒有任何結果" 應該是您未將 xy 的值做相應調整的關係吧?我不知道您為何沒有做處理,因此我在前一篇的程式中並未去動它,我依據您前一篇所補充的說明,再次修改程式如下,您再試試看:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
    int i=0, j=0,x=0,y=0;
    int iArray[256][256];
    AnsiString sz;
    TStringList *sl1=NULL;
    TStringList *sl2=NULL;
    AnsiString nStr = ".0123456789";
    AnsiString chkStr;        if (OpenDialog1->Execute()) {
        sl1 = new TStringList;
        sl1->LoadFromFile(OpenDialog1->FileName);
        for (i=0; iCount; i  ) {
            chkStr = sl1->Strings[i];
            if(nStr.Pos(chkStr.c_str()[0]) > 0 && chkStr.SubString(1,2) != "0 "){
                y  ;
                x = 0;
                sl2 = new TStringList;
                sz = StringReplace(sl1->Strings[i], ". ", "", TReplaceFlags()<CommaText = sz;
                sz = "";
                for (j=0; jCount; j  ) {
                    if(sl2->Strings[j].Pos(" ") == 0){
                        x  ;
                        iArray[i][j] = StrToInt(sl2->Strings[j]);
                        StringGrid1->Cells[x][y] = (IntToStr(iArray[i][j]));
                    }
                }
                delete sl2;
            }
        }
        delete sl1;
    }
}
對了,前一篇忘了說明,為了方便我自己的測試,我將 iArray 陣列大小做了修改,您自己斟酌改成您要的值。
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-03 04:18:07 IP:221.169.xxx.xxx 未訂閱
iii0628:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int i=0, j=0,x=0,y=0,k=0;
  int iArray[250][250];
  AnsiString sz;
  TStrings* sl1 = new TStringList();
  TStrings* sl2 = new TStringList();            if (OpenDialog1->Execute()) {
    sl1->LoadFromFile(OpenDialog1->FileName);
           for(i=0; iCount; i  )  {
      sz=sl1->Strings[i];
      if ( ! sz.IsEmpty() && ((sz[1] >= 48 && sz[1] <= 57) || sz[1] == 46 ) && sz != "0 5 10 15 20 25 30 35") {
        if (sz.Pos(" ") != 0) {
                sz=sz.SubString(sz.Pos(" ") 1,sz.Length()-sz.Pos(" "));
        }
        else {
                      sz=StringReplace(sl1->Strings[i], ".", " ", TReplaceFlags()<CommaText=sz;
              sz="";
              for(j=0; jCount; j  )    {
                iArray[k][j]=StrToInt(sl2->Strings[j]);
                StringGrid1->Cells[x][y]=IntToStr(iArray[k][j]);
              }
        k  ;
      }
           }
  }      delete sl1;
  delete sl2;
}
請參考!
Andy Chang
------
Andy Chang
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-06 10:31:20 IP:220.130.xxx.xxx 未訂閱
RedSnow你好:1.我現在的圓形如果是下面的連結的話,該如何修改,謝謝              2.如果方便的話麻煩請您解釋一下下面2行程式碼                 nStr.Pos(chkStr.c_str()[0]) > 0 && chkStr.SubString(1,2) != "0 "                 sz = StringReplace(sl1->Strings[i], ". ", "", TReplaceFlags()<
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-06 12:49:10 IP:219.137.xxx.xxx 未訂閱
iii0628 您好:
引言:RedSnow你好:1.我現在的圓形如果是下面的連結的話,該如何修改,謝謝 2.如果方便的話麻煩請您解釋一下下面2行程式碼 nStr.Pos(chkStr.c_str()[0]) > 0 && chkStr.SubString(1,2) != "0 " sz = StringReplace(sl1->Strings[i], ". ", "", TReplaceFlags()< http://delphi.ktop.com.tw/loadfile.php?TOPICID=22709728&CC=507892 謝謝你
我先回覆您第二個問題如下:
nStr.Pos(chkStr.c_str()[0]) > 0
將 chkStr 的第一個字元與 nStr 做比對,如果傳回值大於 0 就代表該字元是數字或是小數點,應該要進行拆解    chkStr.SubString(1,2) != "0 "
chkStr 的前兩個字元等於 "0 " 時,視為 x 座標的標尺資料,無需進行拆解    sz = StringReplace(sl1->Strings[i], ". ", "", TReplaceFlags()<String[i] 內容有 ". " 之處全部代換成空字串 (刪除掉),然後設給 sz 字串變數。
接著回覆您第一個問題: 看了您上傳檔案的內容後,才知道原來是檔案內容的差異關係,難怪兩邊的測試結果會不同,您貼在這裡的資料並未在前後加上 [code][/code] 這一組指令簡碼,空白字元會被壓縮掉,所以複製下來的資料與您實際上使用的資料並不相同。 我依據您這次上傳的檔案內容再度做過測試,並修改了程式內容如下:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
    int col=0;
    int row=0;
    int iArray[256][256];
    AnsiString sz;
    TStringList *slRow = new TStringList;
    TStringList *slCol = new TStringList;
    AnsiString nStr = ".0123456789";
    AnsiString chkStr;        if (OpenDialog1->Execute()) {
        slRow->LoadFromFile(OpenDialog1->FileName);
        for (int i=0; iCount; i++) {
            chkStr = slRow->Strings[i].SubString(1, 4);
            chkStr = chkStr.Trim();  // 取前四個字元,並截掉前後的空白字元
            // 如果第一個字元不是數字,且前兩個字元不是 "0 " 則視為所需之資料
            if(nStr.Pos(chkStr.SubString(1,1)) > 0 && chkStr.SubString(1, 2) != "0 "){
                row++;
                col = 0;
                if(StringGrid1->RowCount < row+1){
                    StringGrid1->RowCount = row+1;
                }
                sz = slRow->Strings[i].SubString(5, slRow->Strings[i].Length()-4);
                sz = sz.Trim();  // 截掉前後的空白字元
                slCol->CommaText = sz;  // 拆解行資料為欄位資料
                sz = "";
                for (int j=0; jCount; j++) {
                       col++;
                    if(StringGrid1->ColCount < col+1){
                        StringGrid1->ColCount = col+1;
                    }
                    iArray[i][j] = StrToInt(slCol->Strings[j]);                        StringGrid1->Cells[col][row] = (IntToStr(iArray[i][j]));
                }
            }
        }
        delete slCol;
        delete slRow;
    }
}
您再試試看吧。
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-10 15:48:12 IP:220.130.xxx.xxx 未訂閱
RedSnow 你好:不好意思最近太忙,沒時間寫這程式。我昨天RUN了一下,發現 可以抓值進來了,但是空白鍵的位置也被刪掉了,這樣在StringGrid元件上就不能顯示出我連結上的圖形(不是正確的圓形),今天試了很久還是改不成功,可以請你再幫忙,幫我看一下好嗎???謝謝 補充一下,就是連空字元也要包含進來 發表人 - iii0628 於 2005/06/10 15:57:04
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-10 16:15:46 IP:218.19.xxx.xxx 未訂閱
iii0628 您好:    您是指 "需要擷取數字那些資料行" 裡的空白字元嗎?如果是的話,我個人是覺得這種 "資料" 的設定方式很奇怪,而且不妥當,怎麼會有 "資料有空白字元,卻又以空白字元當作分隔字元" 這種情形發生呢?這種做法似乎不太合理,為什麼那些 "空白字元資料" 不使用 "0" 或是其它字元來設定呢?要不然就使用其它的符號字元 (例如:逗號) 來當作 "分隔字元" 也可以啊? 如果那些資料一定要現在的方式來產生與分析,那就必須要有一些規則可供參考,例如:數字的最大位數是幾位?每個資料行的資料數量有幾個?否則難以拆解這種 "資料與分隔符號相同" 的資料。
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-06-10 16:44:07 IP:220.130.xxx.xxx 未訂閱
RedSnow你好:這是WAFER的良率分析,機器分析出來之後產生的檔案就是這種格式。我現在是要將每一片WAFER的結果統計在一起(之後還會再寫將每一片WAFER相對位置相加再處理)。所以位置上一定要照原始檔案排列才行。    可能是我沒表達清楚,不好意思。我現在的問題是可以照原始檔案排列嗎???(空字元可以刪除) 例如:原始檔案是
           
           1 1
         1 1 1 1 
     1 1 1 1 1 1 1 1 
         1 1 1 1 
           1 1
那複製到StringGrid上時希望是這樣
       
        11
       1111
     11111111
       1111
        11
而不是    11
1111
11111111
1111
11
發表人 - iii0628 於 2005/06/10 16:46:26
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-06-10 17:28:20 IP:218.19.xxx.xxx 未訂閱
iii0628 您好:    就如我前一篇所說的,資料拆解應該都可行,但是必須得知道可供遵循的規則,例如: 1. 數字的最大位數是幾位?以您貼上來的資料來看均是兩位數,這是固定的還是有例外狀況? 2. 每個資料行的資料數量有幾個?不足數是否要補足?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-06-10 17:49:23 IP:218.19.xxx.xxx 未訂閱
iii0628 您好:    我先假設您的資料都是固定寬度,且先暫時不考慮例外狀況,修改程式如下:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
    int col=0;
    int row=0;
    int iArray[256][256];
    TStringList *slRow = new TStringList;
    TStringList *slCol = new TStringList;
    AnsiString nStr = ".0123456789";
    AnsiString chkStr;
    AnsiString sz;
    AnsiString tmp;        if (OpenDialog1->Execute()) {
        slRow->LoadFromFile(OpenDialog1->FileName);
        for (int i=0; iCount; i  ) {
            chkStr = slRow->Strings[i].SubString(1, 4);
            chkStr = chkStr.Trim();
            if(nStr.Pos(chkStr.SubString(1,1)) > 0 && chkStr.SubString(1, 2) != "0 "){
                row  ;
                col = 0;
                if(StringGrid1->RowCount < row 1){
                    StringGrid1->RowCount = row 1;
                }
                sz = slRow->Strings[i].SubString(5, slRow->Strings[i].Length()-4);
                for (int j=1; jColCount < col 1) {
                        StringGrid1->ColCount = col 1;
                    }
                    tmp = sz.SubString(j, 3).Trim();
                    if (tmp.Length() > 0) {
                        iArray[i][j] = StrToInt(tmp);
                    }else{
                        iArray[i][j] = 0;
                    }                        StringGrid1->Cells[col][row] = (IntToStr(iArray[i][j]));
                }
            }
        }
        delete slCol;
        delete slRow;
    }
}
您先試一下,有問題再討論。
iii0628
一般會員


發表:50
回覆:46
積分:19
註冊:2005-04-04

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-06-12 00:07:01 IP:163.13.xxx.xxx 未訂閱
RedSnow你好:謝謝你的幫忙,這就是我要的結果。接下來的部分我再慢慢搞定了,謝謝
penny015
一般會員


發表:20
回覆:15
積分:7
註冊:2005-03-25

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-07-01 16:25:00 IP:220.130.xxx.xxx 未訂閱
RedSnow 你好:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=74195這是我問題的連結,我想請問我現在將您的程式小小修改之後一直出現-627.5783不是整數值的訊息,那我該加什麼條件判斷式才能將-627.5783視為無效資料
int col=0;
    int row=0;
    int iArray[256][256];
    AnsiString sz;
    TStringList *slRow = new TStringList;
    TStringList *slCol = new TStringList;
    AnsiString nStr = ".0123456789";
    AnsiString chkStr;        if (OpenDialog1->Execute()) {
        slRow->LoadFromFile(OpenDialog1->FileName);
        for (int i=0; iCount; i  ) {
            chkStr = slRow->Strings[i].SubString(1, 8);
            chkStr = chkStr.Trim();  // 取前四個字元,並截掉前後的空白字元
            // 如果第一個字元不是數字,且前兩個字元不是 "0 " 則視為所需之資料
            if(nStr.Pos(chkStr.SubString(1,1)) > 0 && chkStr.SubString(1,1) != "-"){
                row  ;
                col = 0;
                if(StringGrid1->RowCount < row 1){
                    StringGrid1->RowCount = row 1;
                }
                sz = slRow->Strings[i].SubString(77, slRow->Strings[i].Length()-36);//這一段程式的作用是什麼???
                sz = sz.Trim();  // 截掉前後的空白字元
                slCol->CommaText = sz;  // 拆解行資料為欄位資料
                sz = "";
                for (int j=0; jCount; j  ) {
                       col  ;
                    if(StringGrid1->ColCount < col 1){
                        StringGrid1->ColCount = col 1;
                    }
                    iArray[i][j] = StrToInt(slCol->Strings[j]);                        StringGrid1->Cells[col][row] = (IntToStr(iArray[i][j]));
                }
            }
        }
        delete slCol;
        delete slRow;
    }
系統時間:2024-06-01 23:04:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!