2016-12-03 7 views
-1

В Visual C# для кнопки, которую я реализую, необходимо прочитать файл .txt и проверить, заканчивается ли каждая строка в текстовом файле определенным символом, и если это так, оно берет имя в этой строке и печатает его на окно сообщения. До сих пор мне удалось установить условие, чтобы проверить, нет ли указанного символа в конце строки, но не может получить имя на нем, так как оно находится между двумя наборами чисел. Имя сразу после первого символа в строке и непосредственно перед началом набора чисел, так как они являются идентификатором пользователя.Как получить конкретное предложение в строке текстового файла?

Это мой код до сих пор внутри кнопки:

private void button1_Click(object sender, EventArgs e) 
    { 
     string line, lastchar; 
     // Read the file and display it line by line. 
     System.IO.StreamReader file = new System.IO.StreamReader(@"rato.txt"); 
     while ((line = file.ReadLine()) != null) 
     { 
      lastchar= line.Substring(line.Length - 1, 1); 
      if (lastchar== "2") MessageBox.Show("Prints the name of the user here"); 
     } 
     file.Close(); 
    } 

И это текстовый файл:

1Paulo111.111.111-11addaqwe2 
2Rambo425.433-628-43ererssd3 
1Momba111.111.111-11asdsad4432 
1Mauricio111.111.111-22wwcssfd2 
1Saulo111.111.111-11qwe1231231 

Так кнопку необходимо проверить, если текущая строка заканчивается «2» и печатает имя в строке. Например, имя в первой строке - это номер Paulo, и, как он заканчивается на «2», «Пауло» будет напечатано в виде сообщений, как в третьей, так и в четвертой строках. В противном случае он перейдет к следующей строке. Затем он будет напечатан в MessageBox: «Пауло, Momba, Маурисио»

Как я могу это сделать?

+2

Посмотрите «Регулярные выражения» (https://msdn.microsoft.com/en-us/library/hs600312(v=vs.110).aspx) –

ответ

2
var names = File.ReadLines(filename) 
       .Where(line => line.EndsWith("2")) 
       .Select(line => Regex.Match(line, @"\p{L}+").Value) 
       .ToList(); 

Это возвращает список, содержащий Paulo, Momba, Mauricio.

PS:\p{L}: Любое Юникода письмо.

+0

как это сделать? – Kankz

+0

@ Kankz знаете ли вы, как закодировать список? (например, 'for',' foreach' и т. д. .....) –

+0

Я не знаю, вы можете мне объяснить? http://prntscr.com/deymgd – Kankz

1

Я согласен с ответом @ L.B и комментарием, который рекомендует изучать регулярные выражения. Это будет чистый подход к вашей проблеме. Я предполагаю, что вы новичок в C#, и поэтому я дам соответствующий ответ. Вы должны просмотреть документацию для класса String. Здесь есть несколько методов и свойств, которые могут оказаться полезными. В вашем случае мы можем посмотреть на использование метода String.EndsWith и метода String.IndexOfAny. С помощью этих методов мы можем внести некоторые изменения в ваш код, который сделает его немного более чистым и понятным.

Сначала давайте посмотрим на эту строку - написанный вами код создаст одну символьную подстроку для текущей строки, а затем вы сравните ее с другой строкой. Вы хотите знать, заканчивается ли строка с «2», поэтому мы можем использовать метод EndsWith для получения этой информации.

lastchar= line.Substring(line.Length - 1, 1); 
if (lastchar== "2") 

Теперь можно записать в виде:

if (line.EndsWith("2")) 

Теперь вы также хотите, чтобы найти имя, это будет сделать два шага. Сначала нам нужно найти индекс первого небуквенного символа после имени, а затем мы можем создать подстроку и отобразить ее в окне сообщения.

var numbers = ".-".ToCharArray(); 
if(line.EndsWith("2")) 
{ 
    // Get the index of the first non-letter character after the name 
    var index = line.IndexOfAny(numbers, 1); 
    var name = line.SubString(1, index - 1); 
    MessageBox.Show(name); 
} 

И если вас интересует тип var. Это просто синтаксический сахар, который позволяет компилятору интерпретировать этот тип, поэтому вам не нужно писать имя типа.

+0

Спасибо, но ничего не показал, что случилось? http://prntscr.com/df9v4v – Kankz

+0

@ Kankz - Не знаю. Вы должны пройти через него с помощью отладчика и посмотреть, получаете ли вы правильные данные, посмотрите, читает ли он файл, проверьте, какое значение для этой строки, посмотрите на значение для имени и т. Д. На скриншоте я могу ' Ответьте на эти вопросы. – pstrjds