文字檔(.txt)中,每N筆資料換一行 |
答題得分者是:paf
|
clarkkent
初階會員 發表:29 回覆:83 積分:32 註冊:2003-01-23 發送簡訊給我 |
各位先進大家好: 小弟這兒有一個問題想請教各位先進
我的文字檔(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 發送簡訊給我 |
|
paf
初階會員 發表:36 回覆:70 積分:41 註冊:2002-12-27 發送簡訊給我 |
引言: 各位先進大家好: 小弟這兒有一個問題想請教各位先進 我的文字檔(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=7int 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 發送簡訊給我 |
clarkkent, 您好
如前二位前輩所言,txt檔無法對字型及字型顏色做變更。
我用RichEdit元件做了一個類似功能的Project,
但是並沒有另存到其他檔案,只做顯示而已。
供您參考看看。
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=35027 =================================
涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。
是非終日有,不聽自然無
天下本無事,庸人自擾之
|
clarkkent
初階會員 發表:29 回覆:83 積分:32 註冊:2003-01-23 發送簡訊給我 |
|
tech_state
版主 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
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 發送簡訊給我 |
引言: 在此想請教各位的是,如果資料是用空格分開的話 那是不是可以設定一個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 發送簡訊給我 |
|
paf
初階會員 發表:36 回覆:70 積分:41 註冊:2002-12-27 發送簡訊給我 |
引言: 請問一下讀進來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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |