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

文字檔(.txt)中,每N筆資料換一行

答題得分者是:paf
clarkkent
初階會員


發表:29
回覆:83
積分:32
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-31 22:49:07 IP:211.74.xxx.xxx 未訂閱
各位先進大家好:    小弟這兒有一個問題想請教各位先進 我的文字檔(1.txt)中有M筆資料(M可能為上百萬筆),想將資料每N筆加入一分行動作,且開頭資料設定為其他顏色,該如何下手呢? 結果存成2.txt    【例】    資料內容(M=16) 123456789abcdefg    當N=100時(N大於原始資料內容M),變成 123456789abcdefg(顯示全部)    當N=7時,變成 1234567(每七個資料換一行) 89abcde fg 當N=2時,變成 12(每二個資料換一行) 34 56 78 9a bc de fg 煩請各位先進賜教 謝謝您 <>新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 >
------
JUST DO IT
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-01 00:07:52 IP:61.224.xxx.xxx 未訂閱
clarkkent你好,    我以前有做過類似的東西,不過沒像你這這麼複雜,    第一,我的資料(還是字元)不會到上百萬筆這麼龐大, 不過我是有到十來萬個「字數」,上百萬我沒試過。    第二,加上字型顏色的格式,是無法在存入.txt中正確顯示, (會多顯示一堆參數的設定) 除非存成.RTF(Rich Text Format)檔或是其他有支援字型格式的檔案類型,    如果這能符合你的需求,或許在下能幫點小忙 國泰平安 發表人 -
paf
初階會員


發表:36
回覆:70
積分:41
註冊:2002-12-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-01 00:10:43 IP:218.164.xxx.xxx 未訂閱
引言: 各位先進大家好: 小弟這兒有一個問題想請教各位先進 我的文字檔(1.txt)中有M筆資料(M可能為上百萬筆),想將資料每N筆加入一分行動作,且開頭資料設定為其他顏色,該如何下手呢? 結果存成2.txt 【例】 資料內容(M=16) 123456789abcdefg 當N=100時(N大於原始資料內容M),變成 123456789abcdefg(顯示全部) 當N=7時,變成 1234567(每七個資料換一行) 89abcde fg 當N=2時,變成 12(每二個資料換一行) 34 56 78 9a bc de fg 煩請各位先進賜教 謝謝您 <>新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 > < face="Verdana, Arial, Helvetica"> 你說的上百萬筆資料是只上百萬個字嗎??? 還有這些字都是連成一行嗎??? 如果是的話,可是試著這樣做 前提:假設N=7
   int count=1;
   ifstream FILE;
   ofstream output;
   char ch;
   FILE.open("c:\\1.txt",ios::in);
   output.open("c:\\2.txt",ios::out);
   while((ch=FILE.get())!=EOF)
   {
      output.write(&ch,1);
      if(count%7==0)
         output.write("\n",1);
      count  ;
   }
ps.存成txt檔,是無法對字型改變顏色的
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-01 00:40:34 IP:203.204.xxx.xxx 未訂閱
clarkkent, 您好 如前二位前輩所言,txt檔無法對字型及字型顏色做變更。 我用RichEdit元件做了一個類似功能的Project, 但是並沒有另存到其他檔案,只做顯示而已。 供您參考看看。 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=35027 ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
clarkkent
初階會員


發表:29
回覆:83
積分:32
註冊:2003-01-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-01 06:48:24 IP:210.68.xxx.xxx 未訂閱
感謝gemi0305、paf、tech_state先進的熱烈回應,你們真是太厲害了! 今天早起果然有蟲吃! . >,小弟一時失察,多虧各位前輩提醒,謝謝大家! 在此想請教各位的是,如果資料是用空格分開的話 那是不是可以設定一個 > <>新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 >
------
JUST DO IT
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-01 10:25:50 IP:61.221.xxx.xxx 未訂閱
clarkkent, 您好
引言:在此想請教各位的是,如果資料是用空格分開的話 那是不是可以設定一個count來計算空格數,再根據這個來判別是否資料筆數符合需求
可以的,但是如果您將資料透過RichEdit1的分行處理後,可以直接用RichEdit1->Lines->Count的指令得到目前的資料分了幾行。 我之前的程式速度比較慢是因為:我用兩個for迴圈處理資料,一個處理資料的分行,一個處理顯示字型的顏色。所以等於花了兩倍的時間。(或許將資料顯示到RichEdit1裡及顯示字型顏色都會影響速度) 以下的code是透過RichEdit1將txt檔案的資料讀入,再將資料分行,然後另存到硬碟裡。供您參考看看。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int M, N, i, j;
   char *buf;
   String str;       RichEdit1->Clear();
   if(OpenDialog1->Execute())
   {
      TMemoryStream *ms = new TMemoryStream();
      ms->LoadFromFile(OpenDialog1->FileName);
      M = ms->Size;
      N = Edit1->Text.ToInt();
      buf = (char *)ms->Memory;
      buf[M] = 0x00;
      RichEdit1->Text = buf;
      str = buf;
      if(N < M)
      {
         j = M / N;
         for(i = 0; i < j   1; i  )
            RichEdit1->Lines->Strings[i] = str.SubString((i * N   1), N)   "\r\n";
         buf = RichEdit1->Text.c_str();
         ms->Clear();
         ms->Write(buf, RichEdit1->Text.Length());
         ms->SaveToFile("C:\\RichEditTest2.txt");
      }
      delete ms;
   }
}
 
================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
paf
初階會員


發表:36
回覆:70
積分:41
註冊:2002-12-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-01 11:49:17 IP:218.164.xxx.xxx 未訂閱
引言: 在此想請教各位的是,如果資料是用空格分開的話 那是不是可以設定一個count來計算空格數,再根據這個來判別是否資料筆數符合需求
假設資料為1_2_3_4_5_6_7_8_9_1_2_3_4_5_6_7_8 _指空格
   int count=1,space_count=1;
   ifstream FILE;
   ofstream output;
   char ch;
   FILE.open("c:\\1.txt",ios::in);
   output.open("c:\\2.txt",ios::out);
   while((ch=FILE.get())!=EOF)
   {
      if(ch==' ')
         space_count  ;
      else
      {
         output.write(&ch,1);
         if(count%7==0)
            output.write("\n",1);
         count  ;
      }
   }
結果space_count為17 ,其實只有16個空格 但您要求以空格來得知資料的筆數 所以space_count的初始值我就設為1
gofome
一般會員


發表:23
回覆:9
積分:6
註冊:2003-05-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-01 17:22:35 IP:61.221.xxx.xxx 未訂閱
請問一下讀進來3筆資料如 A150.0 B100.5 C50.7 A25.3 B50.7 C75.9 A100.0 B200.05 C300.8 可不可以將每筆資料A,B,C及後面的值分別用三種頻色區分呢 如A150.0為藍色,B100.5藍色,50.7為綠色呢 (A,B,C後面的資料筆數不定,但會用空白隔開,且資料筆數前一定為英文字開頭) 如何把資料show在ListBox或Memo或RichEdit裡呢 忙煩各位,謝謝
paf
初階會員


發表:36
回覆:70
積分:41
註冊:2002-12-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-01 22:36:40 IP:218.164.xxx.xxx 未訂閱
引言: 請問一下讀進來3筆資料如 A150.0 B100.5 C50.7 A25.3 B50.7 C75.9 A100.0 B200.05 C300.8 可不可以將每筆資料A,B,C及後面的值分別用三種頻色區分呢 如A150.0為藍色,B100.5藍色,50.7為綠色呢 (A,B,C後面的資料筆數不定,但會用空白隔開,且資料筆數前一定為英文字開頭) 如何把資料show在ListBox或Memo或RichEdit裡呢 忙煩各位,謝謝
假設您的資料為 A150.0 B100.5 C50.7 A25.3 B50.7 C75.9 A100.0 B200.05 C300.8
   ifstream FILE;
   char ch;
   AnsiString s;
   int CharCount=0;
   FILE.open("c:\\1.txt",ios::in);
   while((ch=FILE.get())!=EOF)
   {          RichEdit1->SelStart=CharCount;
      if(ch=='A')
         RichEdit1->SelAttributes->Color=clBlue;
      else if(ch=='B')
         RichEdit1->SelAttributes->Color=clRed;
      else if(ch=='C')
         RichEdit1->SelAttributes->Color=clGreen;
      RichEdit1->SelText=ch;
      CharCount++;
   }
   FILE.close();
完整檔案如下: http://delphi.ktop.com.tw/loadfile.php?TOPICID=10988817&CC=245763 發表人 - paf 於 2003/08/01 22:51:35
系統時間:2024-05-18 5:04:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!