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

請問這種文字檔要如何處理呢?

尚未結案
ultradev
一般會員


發表:5
回覆:2
積分:1
註冊:2004-11-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-22 16:20:47 IP:61.220.xxx.xxx 未訂閱
有一文字如下所示,有四個段落,分別是Student_Lunch, Teacher_Lunch Student_NoLunch, Teacher_NoLunch,現在我想讀取這個文字檔,把吃午餐 和不吃午餐的人(不再區分老師學生)存成另一文字檔: 901256 L 901258 L 808080 L 808081 L 901254 N 901257 N 808082 N 808085 N L表吃午餐、N表不吃午餐,請問要如何做這種處理呢?我對於文字的處理比較不會,是用TStringList、Memo嗎? 這是來源檔: --------------------------- Student_Lunch --------------------------- Number | Name | Note --------------------------- 901256 Normal, Vegetable 901258 Nomal =========================== Total:2 =========================== --------------------------- Teacher_Lunch --------------------------- Number | Name | Note --------------------------- 808080 Normal 808081 Normal =========================== Total:2 =========================== --------------------------- Student_NoLunch --------------------------- Number | Name | Note --------------------------- 901254 Normal 901257 Nomal =========================== Total:2 =========================== --------------------------- Teacher_NoLunch --------------------------- Number | Name | Note --------------------------- 808082 Normal 808085 Normal =========================== Total:2 ===========================
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-22 18:49:45 IP:163.28.xxx.xxx 未訂閱
Hello ultradev,    我把你的資料檔存成一個文字檔: 然後在BCB上拉兩個Memo
  TStringList *str=new TStringList;
  str->LoadFromFile("d:\\test\\data.txt");
  for (int i=0;iCount;i  )
      {
       if (str->Strings[i].SubString(str->Strings[i].Length(),1)=="N")
          Memo1->Lines->Add(str->Strings[i]);
       else
          Memo2->Lines->Add(str->Strings[i]);
      }
  delete str;
執行結果為把N和L分開存放在Memo1和Memo2. 參考看看. //======================== Sorry,誤會你的意思. 改正的code如下: (我把原資料做個對調)
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  AnsiString LN="";
  TStringList *str=new TStringList;
  str->LoadFromFile("d:\\test\\data.txt");
  for (int i=0;iCount;i  )
      {
       Memo1->Lines->Add(str->Strings[i]);  //原資料
       if (str->Strings[i].Pos("Lunch"))     LN="L";
       if (str->Strings[i].Pos("NoLunch"))   LN="N";
       if (IsNumeric(str->Strings[i].SubString(1,1).c_str()))
          Memo2->Lines->Add(str->Strings[i].SubString(1,6) " " LN); //處理過的資料
      }
  delete str;
}
//---------------------------------------------------------------------------
bool TForm1::IsNumeric(char *ch)
{
  int code=int(*ch);
  if (code>=48 && code<=57)
     return true;
  else
     return false;
}
發表人 - nlj859 於 2004/12/22 22:13:42
ultradev
一般會員


發表:5
回覆:2
積分:1
註冊:2004-11-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-22 19:18:34 IP:220.135.xxx.xxx 未訂閱
感謝您的回答,不過可能是我的問題描述不夠清楚吧… 我是希望把原來下面那個分成四個段落的資料掃過一遍, 把第一區塊Student_Lunch下的兩筆記錄以另一檔案記成 901256 L 901258 L 的簡單格式,只要編號跟用L、N來表示要不要吃午餐就好了, 其它區塊也是如此… 請問要如何讓程式知道區塊的範圍,以及如何在該區塊中找出 六位數編號呢… Thanks a lot!!
blk5743
高階會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-22 20:11:55 IP:61.66.xxx.xxx 未訂閱
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    bool BLunch,BNoLunch;
    char TempStr[100];
    TStringList *str=new TStringList;
    str->LoadFromFile("C:\\data.txt");
    for (int i=0;iCount;i++)
    {
        Memo1->Lines->Add(str->Strings[i]);
        if (str->Strings[i].Pos("_Lunch") )
            BLunch = true;
        else if (str->Strings[i].Pos("_NoLunch") )
            BLunch = false;            ZeroMemory(TempStr,sizeof(TempStr));
        strcpy(TempStr,str->Strings[i].c_str());
        if ( BLunch )
        {
            if (isdigit(TempStr[0]))
            {
                TempStr[6] = ' ';
                TempStr[7] = 'L';
                TempStr[8] = '\0';
                Memo2->Lines->Add(TempStr);
            }
        }
        else
        {
            if (isdigit(TempStr[0]))
            {
                TempStr[6] = ' ';
                TempStr[7] = 'N';
                TempStr[8] = '\0';
                Memo3->Lines->Add(TempStr);
            }
        }
    }
    delete str;    }
blk5743
高階會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-22 20:16:43 IP:61.66.xxx.xxx 未訂閱
忘記你還要存檔了    
 
    Memo1->Lines->SaveToFile("C:\\ppp.txt");
    Memo2->Lines->SaveToFile("C:\\qqq.txt");
    Memo3->Lines->SaveToFile("C:\\rrr.txt");
jazz
初階會員


發表:10
回覆:43
積分:35
註冊:2002-06-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-22 20:27:31 IP:61.218.xxx.xxx 未訂閱
雖然慢了一步  
 
TStringList *strList = new TStringList();
strList->LoadFromFile("c:\\test\\data.txt");
bool bLunch = false;
for (int i=0; iCount;   i){
    String str = strList->Strings[i].Trim();
    if (str == "")  continue;
    if (str.Pos("_Lunch") != 0)  bLunch = true;
    if (str.Pos("_NoLunch") != 0)  bLunch = false;
    // 假設數字都是開頭六碼
    if (str.SubString(1, 6).ToIntDef(99999999) != 99999999){
        if (bLunch)
            Memo1->Lines->Add(str.SubString(1, 6)   " L");
        else
            Memo2->Lines->Add(str.SubString(1, 6)   " N");
    }
}
delete strList;
系統時間:2024-05-19 15:23:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!