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

重新發問CSV資料庫問題

尚未結案
piemomoka
一般會員


發表:8
回覆:10
積分:3
註冊:2003-12-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-20 10:07:17 IP:157.16.xxx.xxx 未訂閱
此發問延續http://delphi.ktop.com.tw/topic.php?TOPIC_ID=43579 我要從上面這個CSV文字檔中讀取檔案, 將第一行的Total Machine Time的值代入AnsiString型Input_MakeSpan,還有將Product1,Product2,Product3代入Input_Product中 然後還要讀取每一個Product下的資訊。 我現在知道用fgets(temp_str,250,fp);這個語法一行一行地讀取所有的資料 然後用Input_Machine=Input_Data->Strings[2];這個語法將讀取的那一行中得第三筆資料帶入Input_Machine中。 我的問題就是, (1) 該如何跳過我不需要的行(上面加底線的那些是我不需要的行) (2) 該如何判斷現在讀進的那一行是第一行的Total Machine Time,還是Product1,還是4,MF8,MT8,FI8,CTS8,187,0,0,0,0,0? (3) 該如何按照Product1, Product2……的順序去讀取每一個Product中的資料 我該用什麼語法才好呢?麻煩各位前輩教指導,謝謝 Total Machining Time,5760.00000(s) Object function,5760.00000(s) Product1 No.,Feature,Machine,Fixturing,Tool,M_Time,CT_Time,FI_Change_Time,PS_Waiting_Time,Waiting_Time,Transport_Time 1,MF1,MT1,FI1,CTS1,249,0,0,0,0,0 2,MF7,MT1,FI1,CTS1,298,0,0,0,0,0 3,MF2,MT8,FI8,CTS8,87,0,100,0,0,1000 4,MF8,MT8,FI8,CTS8,187,0,0,0,0,0 5,MF5,MT7,FI8,CTS7,278,0,0,0,0,500 6,MF3,MT6,FI4,CTS6,60,0,100,0,0,1000 7,MF4,MT4,FI4,CTS4,223,0,0,0,0,500 8,MF6,MT6,FI6,CTS6,78,0,100,0,0,1000 Product2 No.,Feature,Machine,Fixturing,Tool,M_Time,CT_Time,FI_Change_Time,PS_Waiting_Time,Waiting_Time,Transport_Time 1,MF2,MT8,FI8,CTS8,87,0,0,0,0,0 2,MF8,MT8,FI8,CTS8,187,0,0,0,0,0 3,MF4,MT4,FI4,CTS4,223,0,100,0,0,1000 4,MF3,MT6,FI4,CTS6,60,0,0,0,0,500 5,MF6,MT2,FI5,CTS2,62,0,100,0,0,1000 6,MF1,MT5,FI5,CTS5,223,0,0,0,0,500 7,MF7,MT5,FI5,CTS5,267,0,0,0,0,0 8,MF5,MT5,FI5,CTS5,294,0,0,0,0,0 Product3 No.,Feature,Machine,Fixturing,Tool,M_Time,CT_Time,FI_Change_Time,PS_Waiting_Time,Waiting_Time,Transport_Time 1,MF6,MT2,FI5,CTS2,62,0,0,0,0,0 2,MF5,MT7,FI8,CTS7,278,0,100,0,0,1000 3,MF2,MT8,FI8,CTS8,87,0,0,0,0,500 4,MF8,MT8,FI8,CTS8,187,0,0,0,0,0 5,MF3,MT6,FI4,CTS6,60,0,100,0,0,1000 6,MF4,MT4,FI4,CTS4,223,0,0,0,0,500 7,MF1,MT1,FI1,CTS1,249,0,100,0,0,1000 8,MF7,MT1,FI1,CTS1,298,0,0,0,0,0 Minimize Object function 0,5760 1,5760 我才剛開始學寫程式,問的問題比較沒水準,不要生氣哦!請多指教
dllee
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-21 08:25:07 IP:211.76.xxx.xxx 未訂閱
是同一個檔嗎?    
TStringList *csvFile=new TStringList;
TStringList *oneData=new TStringList;
csvFile->LoadFromFile("我的資料檔.csv");
for(int i=0;iCount;i  )
{
  oneData->CommaText=csvFile->Strings[i];
  if(oneData->Count==11) // 有資料的行(可能包含 Title)
  {
    if(oneData->Strings[0]=="No.")
    {
      // 這一筆是不要的 No.,Feature,Machine,Fixturing,Tool,M_Time,CT_Time,FI_Change_Time,PS_Waiting_Time,Waiting_Time,Transport_Time
    }
    else
    {
      // 這一筆是要的資料 4,MF8,MT8,FI8,CTS8,187,0,0,0,0,0
    }
  }
  else if(oneData->Count==2) // 只有一個逗號的資料行,包含 Total Machine Time 及其他不要的資料
  {
    if(oneData->Strings[0]=="") // Total Machining Time
    {
      // oneData->Strings[1] 就是想要的時間了
    }
    else
    {
      // 其他的都是不要的資料
    }
  }
  else if(oneData->Count==1) // 只有一個筆資料的包含 Product1,2,3
  {
    if(oneData->Strings[0]=="Product1")
    {
      // 可以設定旗標,表示之後再讀取的資料是屬於 Product1
    }
    else if(oneData->Strings[0]=="Product2")
    {
      // 可以設定旗標,表示之後再讀取的資料是屬於 Product2
    }
    else if(oneData->Strings[0]=="Product3")
    {
      // 可以設定旗標,表示之後再讀取的資料是屬於 Product3
    }
    else
    {
      // 其他不要的資料,也可能是空白行
    }
  }
  else
  {
    // 其他不要的資料,也可能是空白行
  }
}
delete oneData;
delete csvFile;
以上的動作就是 timhuang 大大所說的自行 parse 檔案的內容。 通常資料檔的格式千奇百怪,這些都需要自行去 parse,以上是最簡易的分析法,用於已知的資料格式去 parse 出想要的資料。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
piemomoka
一般會員


發表:8
回覆:10
積分:3
註冊:2003-12-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-21 11:46:05 IP:157.16.xxx.xxx 未訂閱
謝謝板主,我一直去想parse到底是什麼東西,想到死胡同裡去了。 現在好像被板主點醒一般,前途無限的感覺
piemomoka
一般會員


發表:8
回覆:10
積分:3
註冊:2003-12-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-23 16:02:51 IP:157.16.xxx.xxx 未訂閱
引言: (1)是同一個檔嗎? (2)// 可以設定旗標,表示之後再讀取的資料是屬於 Product1
dllee板主您好,您問我的『是一個檔嗎?』我沒有回答。 若是您指的是要開啟之後讀入的檔案的話,是只有一個。 還有想拜託各位前輩教我如何設定旗標。我到現在還搞不清楚旗標怎麼用 我說的這些資料是屬於 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=14200197&CC=317583"> 我不知道我這樣寫對不對,麻煩大家幫我看看 『header file』 private: AnsiString ProductName; 『.cpp』 TStringList *csvFile=new TStringList; TStringList *oneData=new TStringList; csvFile->LoadFromFile("我的資料檔.csv"); for(int i=0;iCount;i++) { oneData->CommaText=csvFile->Strings[i]; if(oneData->Count==11) // 有資料的行(可能包含 Title) { if(oneData->Strings[0]=="No.") { // 這一筆是不要的 No.,Feature,Machine,Fixturing,Tool,M_Time,CT_Time,FI_Change_Time,PS_Waiting_Time,Waiting_Time,Transport_Time } else { // 這一筆是要的資料 4,MF8,MT8,FI8,CTS8,187,0,0,0,0,0 StringGrid1->Cells[0][i]=(AnsiString) ProductName; } } else if(oneData->Count==2) // 只有一個逗號的資料行,包含 Total Machine Time 及其他不要的資料 { if(oneData->Strings[0]=="") // Total Machining Time { // oneData->Strings[1] 就是想要的時間了 } else { // 其他的都是不要的資料 } } else if(oneData->Count==1) // 只有一個筆資料的包含 Product1,2,3 { if(oneData->Strings[0]=="Product1") { // 可以設定旗標,表示之後再讀取的資料是屬於 Product1 ProductName=oneData->Strings[0]; } else if(oneData->Strings[0]=="Product2") { // 可以設定旗標,表示之後再讀取的資料是屬於 Product2 ProductName=oneData->Strings[0]; } else if(oneData->Strings[0]=="Product3") { // 可以設定旗標,表示之後再讀取的資料是屬於 Product3 ProductName=oneData->Strings[0]; } else { // 其他不要的資料,也可能是空白行 } } else { // 其他不要的資料,也可能是空白行 } } delete oneData; delete csvFile; 發表人 - piemomoka 於 2004/02/23 17:57:33
系統時間:2024-04-29 16:32:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!