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

如何刪除文字檔裡頭的 \0 及其他不可見字元

答題得分者是:Stallion
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-16 23:50:13 IP:211.76.xxx.xxx 訂閱
想請問各位,我現在有一份純文字檔。
可是不知怎麼搞的,裡頭包含了一些 0x20 之前的字元 (除了 CR/LF 之外)
我想請問的是,要怎麼把這份文字檔裡頭 0x20 之前的字元都刪除呢 ?
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-17 00:18:59 IP:211.22.xxx.xxx 未訂閱
Trims leading and trailing spaces and control characters from a string.

Unit
SysUtils
Category
string handling routines
extern PACKAGE AnsiString __fastcall Trim(constAnsiString S);
extern PACKAGE WideString __fastcall Trim(const WideString S);
Description
Trim removes leading and trailing spaces and control characters from the given string S.
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-17 01:16:00 IP:203.73.xxx.xxx 訂閱
Trim...看起來..好像...只會處理字串的頭跟尾...?...(逃走)

我是很懶..就為你想要的字元建立一個列舉,然後逐字檢查..XD
你可以整個讀到記憶體裡面,處理完之後再一口氣寫回去,只要檔案不大的話XD
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-17 01:36:48 IP:211.76.xxx.xxx 訂閱
Trim 應該只會處理頭跟尾,所以應該不是我要的。
我的文字檔有大有小,大有可能大到 2~30MB。
不知是否有什麼比較快的方法呢?
===================引 用 文 章===================
Trim...看起來..好像...只會處理字串的頭跟尾...?...(逃走)

我是很懶..就為你想要的字元建立一個列舉,然後逐字檢查..XD
你可以整個讀到記憶體裡面,處理完之後再一口氣寫回去,只要檔案不大的話XD
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
pcboy
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-17 07:40:43 IP:203.204.xxx.xxx 未訂閱
只能逐字檢查過濾
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-17 23:53:57 IP:211.22.xxx.xxx 未訂閱
我只是想開個頭給個思緒而已~
Trim不光只是個單一函數而已!它在String的物件裡面同樣也有個同名的物件方法。因此既然是個檔案何不動態產生一個類似TMemo之類的VCL元件然後以其Lines屬性中的方法LoadFromFile讀進記憶體後,再依照物件的Lines屬性來清除控制字元呢?類似如下:
char *pChar;
int i;
TMemo *aMemo;
AnsiString aString,TempString;

try
{
aMemo = new TMemo(this);
aMemo->Lines->LoadFromFile("\\yourfilename.txt");
for ( i = 0 ; i < aMemo->Lines->Count ; i )
{
aString = aMemo->Lines->Strings[i];
aString = aString.Trim(); // could also TrimLeft() or TrimRight()
pChar = aString.c_str();
TempString = "";
while ( isprint(*pChar) || *pChar == '\n' )
TempString = *pChar ;
aString = TempString;
// your code....
}
}
__finally
{
delete aMemo;
}
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-18 23:53:00 IP:211.22.xxx.xxx 未訂閱
抱歉發現SAMPLE CODE有點錯誤,改了一下!
系統時間:2024-05-04 2:38:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!