问个简单的问题(100分)

  • 主题发起人 主题发起人 血汉
  • 开始时间 开始时间

血汉

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位富翁,有个文本文件,每行一组数据,我想把里面的中文字符去掉,还有是去掉重复的数据,重复的只保留一个,应该怎么实现?
 
没有简单省事的办法,你可以用TStringList的LoadFromFile(FileName)加载,处理后用TStringList的SaveToFile(FileName)保存
 
关键是怎么处理哈
用.net是很容易实现,我想知道用delphi怎么实现
.net的代码是这样的:
DataSet1 ds = new DataSet1();
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
using (StreamReader sr = new StreamReader(openFileDialog1.FileName, Encoding.GetEncoding("GB2312")))
{
string line;
while ((line = sr.ReadLine()) != null)
{
if (!Regex.Match(line, @"[/u4e00-/u9fff]").Success)
{
try
{
DataRow dr = ds.Tables[0].NewRow();
dr[0] = line;
ds.Tables[0].Rows.Add(dr);
}
catch { }
}
}
sr.Close();
}
ds.Tables[0].AcceptChanges();
using (StreamWriter sw = new StreamWriter(this.saveFileDialog1.FileName, false, Encoding.GetEncoding("GB2312")))
{
if (ds.Tables[0].Rows.Count > 0)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{ sw.WriteLine(dr[0].ToString()); }
}
sw.Close();
}
MessageBox.Show("完了!");
}
}
 
我看不太懂嘿嘿,是不是先读取同时处理并将结果放到ds中,最后保存ds到文件中,catch是处理函数吗?
procedure TForm1.Button1Click(Sender: TObject);
var FileName:String;
SL:TStringList;
i:Integer;
S:String;
begin
OpenDialog1.Execute;
FileName:=OpenDialog1.FileName;
if FileName='' then exit;
SL:=TStringList.Create;
SL.LoadFromFile(FileName);
for i:=0 to SL.Count-1 do begin
S:=SL;
SL:=处理函数(S);
end;
SL.SaveToFile(FileName);
end;
 
//删除中文
if ord(str) > 255 then
delete(str, i, 2);
至于重复的,那个需要看你的位数了,用POS或什么的了,我看不懂.NET
 
在DATASTABLE中设了唯一的字段是主键.不能重复.
.net是用了这个
delphi里没有这样的哈
我是这样想的:读取每行到一个数据库,然后查询看有重复的就不入库
不过这样感觉麻烦了吧
谁还有更好的办法吗?
 
刚刚顺手写了个` 不知道是否符合要求`血汉我的QQ:830540 好久没聊过了`
//***********************************************
procedure TForm1.Button1Click(Sender: TObject);
var
s, Tmp: TStrings;
data: string;
i, n: integer;
begin
s := TStringlist.Create;
Tmp := TStringlist.Create;
s.LoadFromFile('c:/1.txt'); //载入文本
for i := 0 to s.Count - 1 do
begin
data := s.Strings;
n := 0;
repeat
inc(n);
if ByteType(data, n) = mbTrailByte then //判断是否中文
begin
delete(data, n - 1, 2); //删除中文
dec(n);
end;
until
n >= length(data);
if Tmp.IndexOf(data) = -1 then //删除中文后,判断该行是否重复
Tmp.Add(data);
end;
Tmp.SaveToFile('c:/2.txt'); //保存修改过的文本
s.Free;
Tmp.Free;
end;
 

明小子,我看看哈
 
后退
顶部