我有一个包含大量电子邮件的txt文件,并且它们没有空格分隔。我想逐行整理这些电子邮件。
所以,我的问题是:如何只获取分隔这些电子邮件的部分?
Ex:(foo.txt)
brarabelalima @ hotmail.comaracaesporteclube @ terra.com.br
我想这样:(new.txt)
brarabelalima@hotmail.com
aracaesporteclube@terra.com.br
这是我的最后一次尝试:
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils,
Windows,
Classes;
procedure arrumarEmailsTXT;
var
Linhas, Colunas:TStringList;
i,j:integer;
arq: TextFile;
begin
Linhas := TStringList.Create;
Colunas := TStringList.Create;
AssignFile(arq, 'new.txt');
Rewrite(arq);
try
Linhas.LoadFromFile('foo.txt');
for i := 0 to Pred(Linhas.Count) do
begin
Colunas.text := StringReplace(Linhas.Strings[i],'',#13,[rfReplaceAll]);
for j := 0 to Pred(Colunas.Count) do
begin
Writeln(arq, Colunas.Strings[j]);
end;
end;
finally
CloseFile(arq);
Linhas.Free;
Colunas.Free;
end;
end;
begin
arrumarEmailsTXT;
end.
答案 0 :(得分:-3)
首先浏览文本并创建一个包含@ - @
之间部分的列表然后,记下新列表的每个条目,并从开头到第一个句点剪切文本。这将为您提供这些电子邮件所包含的域名列表。
然后,您需要填写域的最后一部分,并根据您的经验创建一个新的列表库。 例如,对于每个' hotmail'你会有' hotmail.com'和' hotmail.co.uk'等
之后,您可以根据完整的域名提取每行的正确位置。
然而,这可能会变得非常繁重,需要很多时间和资源。你的档案很大吗?您可能需要线程才能有效地运行作业。此外,了解电子邮件的来源可能会帮助您减少域名。
答案 1 :(得分:-3)
<强> SOLUTION: 强>
{$APPTYPE CONSOLE}
{$R *.res}
uses
Winapi.Windows,
Classes,
System.SysUtils;
function ExtractEmails(const Input: String; out Emails: TStringList): Boolean;
var
I : Integer;
Buffer : String;
Tokens : TStringList;
begin
Result := False;
Tokens := TStringList.Create;
Emails := TStringList.Create;
Try
Tokens.Delimiter := #32;
Tokens.DelimitedText := Input;
For I := 0 To Tokens.Count - 1 Do
begin
Buffer := Tokens.Strings[I];
If Length(Buffer) < 5 Then Continue;
If (Pos('@',Buffer) > 1) And
(Pos('.',Buffer) > 3) And
(Pos('.',Buffer) < Length(Buffer)) Then
begin
Emails.Add(Buffer);
end;
end;
Result := True;
Finally
Tokens.Free;
end;
end;
procedure Extrai;
var
Linhas,Emails:TStringList;
arq: TextFile;
begin
Linhas := TStringList.Create;
Emails := TStringList.Create;
try
Linhas.LoadFromFile('foo.txt');
AssignFile(arq, 'emails.txt');
Rewrite(arq);
If ExtractEmails(Linhas.Text,Emails) Then
begin
Writeln(arq,Emails.Text);
end;
finally
CloseFile(arq);
Linhas.Free;
Emails.Free;
end;
end;
begin
Extrai;
end.