奇怪问题:我有一个文本文件,里面有好多条记录,我想把里面的一个乱码用空格替换掉,不知如何实现?我本用 TStringList *txtlist=new
我本想用 TStringList *txtlist=new TStringList;
String ss;
TStringList *txtlist=new TStringList;
txtlist-> LoadFormFile( "c:\\mytxt.txt ");
for(int i=0;i <txtlist-> Count;i++)
{
ss=txtlist-> Strings[i];
if(ss.Pos( "字符串 ")> 0)
ss=StringReplace(ss, "字符串 ", " ",-----------);
txtlist-> Strings[i]=ss;
}
txtlist-> SaveToFile( "c:\\mytxt.txt ");
delete txtlist;
现在问题是:
主要是用这种方法读不出记录时,只有第一行的一部分数据
不知还有其它什么办法可以实现?
用C来读,但如何进行替换呢?
万分感谢!
[解决办法]
改了改,好好的啊
凡是“字符串”变化成 空格 存成新名字mytxt1.txt
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String ss;
TStringList *txtlist=new TStringList;
txtlist-> LoadFromFile( "mytxt.txt ");
for(int i=0;i <txtlist-> Count;i++)
{
ss=txtlist-> Strings[i];
TReplaceFlags Flags;
Flags < <rfReplaceAll;
if(ss.Pos( "字符串 ")> 0) ss=StringReplace(ss, "字符串 ", " ",Flags);
txtlist-> Strings[i]=ss;
}
txtlist-> SaveToFile( "mytxt1.txt ");
delete txtlist;
}
[解决办法]
TStringList的LoadFromFile一般只能处理文本,如果你的文件中有文本结束符(0x1A)或字串结束符(0x00),它就有问题了
C/C++的文件处理能力是很强的,最简的,用C标准函数就可以实现你的要求
1.用rename将mytxt.txt改名,如mytxt.bak
2.用fopen打开文件mytxt.bak,并新建文件mytxt.txt
3.用getc逐一读文件mytxt.bak,并判是否为乱符,如果是,改为空格写入mytxt.txt,否则直接写入文件mytxt.txt
4.重复3直到mytxt.bak文件结束
5.如果必要,删除文件mytxt.bak
[解决办法]
轉為WideString( unicode ) 然後再處理。處理完再轉回來。
可是如果你有些特殊的字無法轉換為 unicode ,這種轉換就會丟失那個字了。
100% 正確,要期待中文標准及軟件的統一了。
要不你就做兩次, unicode方式一次, c方式一次。 對比一下,智能選取一個,盡最大努力不出錯。
[解决办法]
我觉得关键是乱码怎么确定,比如:
"我觉得关际锹衣朐趺慈范? " " '际 '的第一位编码改成空格就好了 "
这里面从哪里开始是乱码?无从得知啊