2009-07-17 74 views
2

我正在写这个小程序从文本文件中提取任意数量的电子邮件地址。我收到两个错误,“使用未分配的本地变量”。我不知道为什么。简单的C#错误帮助

static void Main(string[] args) 
{ 
string InputPath = @"C:\Temp\excel.txt"; 
string OutputPath = @"C:\Temp\emails.txt"; 
string EmailRegex = @"^(?:[a-zA-Z0-9_'^&/+-])+(?:\.(?:[a-zA-Z0-9_'^&/+-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)$"; 
string Text = String.Empty; 
StringBuilder Output; 
List<string> Emails; 

using (TextReader tr = new StreamReader(InputPath)) 
{ 
    Text = tr.ReadToEnd(); 
} 

MatchCollection Matches = Regex.Matches(Text,EmailRegex); 

foreach (Match m in Matches) 
{ 
    Emails.Add(m.ToString().Trim()); // one error is here 
} 

foreach (String s in Emails) 
{ 
    Output.Append(s + ","); // the other error is here 
} 

using (TextWriter tw = new StreamWriter(OutputPath)) 
{ 
    tw.Write(Output.ToString()); 
} 
} 

对不起格式化......我有点时间紧迫!

编辑:WOW。我是一个白痴 - 一定是因为我时间紧迫!!!!

+1

你想让我们为你“惩罚”你是个“白痴?”吗? ;)顺便说一句,按下时间,慢下来!这是你真正的错误。 (和不,你是不是一个白痴,我们都犯了这个错误至少一次) – 2009-07-17 13:31:43

回答

21

您未初始化StringBuilder和List。

StringBuilder Output = new StringBuilder(); 
List<string> Emails = new List<String>(); 
9

的问题是在这里:

StringBuilder Output; 
List<string> Emails; 

您还没有初始化EmailsOutput。尝试:

StringBuilder Output = new StringBuilder(); 
List<string> Emails = new List<string>(); 
8

你是不是创建一个Stringbuilder或电子邮件列表:

StringBuilder Output = new StringBuilder(); 
List<string> Emails = new List<string>(); 
8

你的“输出”和“列表”变量不是与对象实例分配。更改:

StringBuilder Output; 
List<string> Emails; 

StringBuilder Output = new StringBuilder(); 
List<string> Emails = new List<string>(); 
4

您必须使用 “新” 来初始化电子邮件和输出对象。基本上有:

StringBuilder Output = new StringBuilder(); 
List<string> Emails = new List<string>(); 
1

正如许多人所说,错误来自你没有创建的对象。

但是,为什么你将电子邮件地址存储在临时列表中,然后将它们放入一个临时字符串中,然后将其写入文件?直接写入文件:

static void Main(string[] args) { 

    string InputPath = @"C:\Temp\excel.txt"; 
    string OutputPath = @"C:\Temp\emails.txt"; 
    string EmailRegex = @"^(?:[a-zA-Z0-9_'^&amp;/+-])+(?:\.(?:[a-zA-Z0-9_'^&amp;/+-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)$"; 

    using (TextWriter tw = new StreamWriter(OutputPath)) 
     foreach (Match m in Regex.Matches(File.ReadAllText(InputPath), EmailRegex)) { 
     tw.Write(m.Value); 
     tw.Write(','); 
     } 
    } 
} 

注意:正则表达式似乎已经损坏了某处沿线。其中有一些&amp;,可能应该只是&个字符。