2009-07-17 2 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

Хотели бы вы, чтобы вы могли «наказать» вас за то, что вы «идиот»? ;) Btw, при нажатии на время, замедляется! Это твоя настоящая ошибка. (и нет, вы не идиот. Мы все допустили эту ошибку хотя бы один раз) –

+0

90% времени вам нужно просто отходить от клавиатуры около 5 минут. Пойдите, выпейте чашку кофе. Протяжение. В любом случае, это хорошо для вас. –

ответ

21

Вы не инициализируете StringBuilder и List.

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

Проблема здесь:

StringBuilder Output; 
List<string> Emails; 

Вы не инициализирован Emails и Output. Попробуйте:

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

вы не создаете список в Stringbuilder или E-mail:

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;, которые, вероятно, должны быть только & символов.

Смежные вопросы