Я пишу эту небольшую программу, чтобы извлечь любое количество адресов электронной почты из текстового файла. Я получаю две ошибки: "Использование неназначенной локальной переменной". и я не уверен, почему.
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. Я идиот - должно быть потому, что я нажимаю на время!!!!
Вы не инициализируете StringBuilder и List.
StringBuilder Output = new StringBuilder();
List<string> Emails = new List<String>();
Проблема здесь:
StringBuilder Output;
List<string> Emails;
Вы не инициализировали Emails
и Output
. Попробуйте:
StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>();
вы не создаете Stringbuilder
или список электронной почты:
StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>();
Переменные "Вывод" и "Список" не назначаются экземплярами объектов. Изменение:
StringBuilder Output;
List<string> Emails;
Для
StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>();
Вы должны инициализировать объекты электронной почты и вывода, используя "новое". В основном есть:
StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>();
Как многие говорили, ошибки исходят от объекта, который вы не создали.
Но почему вы храните адреса электронной почты во временном списке, а затем помещаете их во временную строку, а затем записываете в файл? Просто напишите их прямо в файл:
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,}\.?)$";
using (TextWriter tw = new StreamWriter(OutputPath))
foreach (Match m in Regex.Matches(File.ReadAllText(InputPath), EmailRegex)) {
tw.Write(m.Value);
tw.Write(',');
}
}
}
Примечание. Регулярное выражение, похоже, было повреждено где-то вдоль линии. В нем есть &
, которые, вероятно, должны быть просто &
.