2016-10-15 4 views
0

Здравствуй Я использую Консольное приложение, и я читаю строку и получить мои значения:Чтение строка на заказ с проверкой пробельной

Строка:

 Information                                                                                                                        
First Name: WORLD    Middle: HELLO Last Name: PQRS 
  
CalBRE:Login ID: IVACOSEST 
Address: 12345 ABCd RD. 
  
City: ABCd XYZ State: California Zip: 12345                                                           
Direct Office Ph: 123-456-7890 Cell Phone: 123-456-7890 
Home Phone: Fax: 123-456-7890 
Toll Free Phone: Pager: 
Voicemail: 
Email: [email protected] 
Office Information                                                                                                                                                   
Office Name: Offc. Office Code: IVNEXT 
Address: 165 ABC XYZ LANE #10 Office CalBRE:
City: San Fransisco Zip: 12345 
Phone: 123-456-7890 Fax: 123-456-7890 

С моими выше строк, я хочу, чтобы прочитать данные, как показано ниже :

FirstName

Средний

LastName

DirectOffice

Я хочу, чтобы прочитать данные, как FirstName и не от имени исходного, пока не получит белое пространство, пожалуйста, предложите мне кто-нибудь, как я?

Я только что сделали следующий код:

var stIndex = String[i].IndexOf("FirstName") + (FirstName).Length; 

Строка имеет тысячи записей, так что я поставил петлю каждый массив имеет строки, как я Приведенный выше примера.

В вышеприведенном примере я получаю начальную точку, но как получить последнюю точку:

Я имею в виду пример, который я хочу читать ПгвЬЫате так что я получил начальную точку Имя, но как читать Имя: Значение т.е. МИР пока не дойдет до белого пространства!

ответ

0

Как насчет того, чтобы вы прочитали все символы между «Имя» и «Средний»: затем обрезайте результирующую строку, чтобы получить значение первого имени.

int startIndex = String[i].IndexOf("First Name") + ("First Name:").Length; 
int middleNameStartIndex = String[i].IndexOf("Middle"); 

string FirstNameValue = String[i].Substring(startIndex, middleNameStartIndex - startIndex).trim(); 

одинаковы для всех остальных, вы знаете расположение клавиш, так что вы можете выполнить аналогичную операцию для всех остальных ...

+0

Спасибо за ответ, но я использовал эту логику, но в случае, если у меня нет среднего имени, что мне делать, это дает мне другое значение и некоторая ошибка. Поэтому по этой причине я хочу читать с начальной точки строки, такой как FirstName, до конца. –

+0

@padhiyar У вас может быть строковый массив со всеми именами ключей, тогда вы можете прокручивать его, чтобы найти минимальный индекс длины, как только вы найдете минимальный индекс длины, вы будете уверены, что он будет вашим следующим ключом, а затем прочитайте символы между базовыми ключ и тот, который вы только что нашли из массива с минимальной длиной –

+0

@padhiyar, дайте мне знать, если вы хотите получить его sudo-код .... Я обновлю свой ответ. –

0

Я определил массив каждый элемент списка искали внутри строки следующим образом,

string a = "your text"; 
List<string> results = new List<string>(); 
string[] searchList = { "First Name:", "Middle:", "Last Name:", "Direct Office Ph:" }; 

foreach (var item in searchList) 
     { 
      int indexStarts = a.IndexOf(item); // first whitespace 
      a = a.Substring(indexStarts + item.Length + 1); 
      if (a.Substring(a.IndexOf(" "), a.IndexOf(" ")).Trim() == "-") // in the phone seperator we need to approach another solution so checking - character 
      { 
       string result = ""; 
       while (a.Substring(a.IndexOf(" "), a.IndexOf(" ")).Trim() == "-") 
       { // if the following string between whitespaces has - we need to loop 
        result += a.Substring(0, a.IndexOf(" ") + 3); //white space - whitespace so 3 character it will generate 123 - then 456 - .. 
        a = a.Substring(a.IndexOf(a.Substring(0, a.IndexOf(" ") + 3)) + a.Substring(0, a.IndexOf(" ") + 3).Length); 
// after taking numbers 123 -, 456 - it will reproduce the text and making start a new startpoint before - and whitespaces 

       } 
       result += a.Substring(0, a.IndexOf(" ") + 1); // if while loop ends it means there is one whitespace at the 7890 Cell Phone: behind 0 and C so we need to substring it. 
       results.Add(item + " " + result); // add to list 
      } 
      else 
      { 
       results.Add(item + " " + a.Substring(0, a.IndexOf(" ") + 1)); // this one add directly (for firstname,middle,lastname) 
      } 

     } 

Вот результат (кстати это только для одной строки, только для логики),

enter image description here

Надежда помогает,

0

Я бы начал с кода, как показано ниже. Ввод очень сложный для синтаксического анализа и требует настраиваемого анализатора. Это сложно для следующих причин 1) Несколько свойств на одной линии 2) Особенности Имена будучи несколько слов с пробелами между 3) Значение быть несколько слов с пробелами между 4) Некоторые свойства не имеют значения

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.txt"; 
     static void Main(string[] args) 
     { 
      StreamReader reader = new StreamReader(FILENAME); 
      string inputLine = ""; 
      Person newPerson = null; 
      while((inputLine = reader.ReadLine()) != null); 
      { 
       inputLine = inputLine.Trim(); 
       if (inputLine.Length > 0) 
       { 
        if (inputLine.Contains("Information")) 
        { 
         newPerson = new Person(); 
         Person.peopel.Add(newPerson); 
        } 
        else 
        { 
         //enter code to parse data 
        } 
       } 
      } 
     } 
    } 
    public class Person 
    { 
     public static List<Person> peopel = new List<Person>(); 
     public Dictionary<string, string> properties = new Dictionary<string, string>(); 
    } 
} 
Смежные вопросы