2015-01-08 3 views
-3

Я пытаюсь добавить лидеров в своем единстве приложение У меня есть длинная строка, как показано ниже (только пример, фактическая строка данных HTTP трубы из моего веб-службы, не хранится вручную):Получить первое слово на каждой новой строке в длинной строке?

string str ="name1|10|junk data.....\n 
      name2|9|junk data.....\n 
      name3|8|junk data.....\n 
      name4|7|junk data....." 

I хотите получить первое слово (строка перед первым каналом '|', как name1, name2 ...) из каждой строки и сохранить его в массиве, а затем получить числа (10,9,8 ... arter the '| ') и сохраните его в другом. Кто-нибудь знает, что это лучший способ сделать это?

+1

У вас есть алгоритм в своем уме? Как, как бы вы сделали это вручную, если бы вас попросили сделать это как можно подробнее? – zerkms

+0

Вы пробовали что-нибудь? –

+0

что вы пробовали? – giammin

ответ

1

скрипку здесь: https://dotnetfiddle.net/utp4HK

код ниже, вы можете захотеть пересмотреть алгоритм производительности, но если это не проблема, это будет делать трюк;

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     string str ="name1|10|junk data.....\nname2|9|junk data.....\nname3|8|junkdata.....\nname4|7|junk data....."; 

     foreach (var line in str.Split('\n')) 
     { 
      Console.WriteLine(line.Split('|')[0]); 
     } 
    } 
} 
+0

Спасибо, это сработало и пригодится позже. Я просто извлекаю данные для 10 лучших пользователей, поэтому производительность не должна быть проблемой. Я закончил использование: 'string str = line.Split ('|') [0] +": Score: "+ line.Split ('|') [1] "' в цикле foreach, чтобы получить первые 2 части данных и сохранить их в массиве. – L457

0

Проверить эту ссылку на расщепление строк: http://msdn.microsoft.com/en-us/library/ms228388.aspx

Вы можете сначала создать массив строк (для каждой строки) путем разделения длинной строки с \ п как разделитель.

Затем вы можете разделить каждую строку с | как делиметр. Имя будет 0-м индексом массива, и число будет первым индексом массива.

1

Первый раскол по новой строки символов:

string[] lines = str.Split(new string[]{Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); 

Затем вы можете использовать LINQ, чтобы получить оба массива:

var data = lines.Select(l => l.Trim().Split('|')).Where(arr => arr.Length > 1); 
string[] names = data.Select(arr => arr[0].Trim()).ToArray(); 
string[] numbers = data.Select(arr => arr[1].Trim()).ToArray(); 
0

Прежде всего, вы не может иметь мульти строку строки без использования verbatim string literal. С помощью текстового литерала verbatim вы можете разделить свою строку на основе \r\n или Environment.NewLine;

string str = @"name1|10|junk data..... 
       name2|9|junk data..... 
       name3|8|junk data..... 
       name4|7|junk data....."; 
var array = str.Split(new []{Environment.NewLine}, 
         StringSplitOptions.RemoveEmptyEntries); 
foreach (var item in array) 
{ 
    Console.WriteLine(item.Split(new[]{"|"}, 
        StringSplitOptions.RemoveEmptyEntries)[0].Trim()); 
} 

Выход будет;

name1 
name2 
name3 
name4 
0

Попробуйте это:

string str ="name1|10|junk data.....\n" + 
         "name2|9|junk data.....\n" + 
         "name3|8|junk data.....\n" + 
         "name4|7|junk data....."; 

      string[] tempArray1 = str.Split('\n'); 
      string[] tempArray2 = null; 

      string[,] newArray = null; 


      for (int i = 0; i < tempArray1.Length; i++) 
      { 
       tempArray2 = tempArray1[i].Split('|'); 

       if (newArray[0, 0].ToString().Length == 0) 
       { 
        newArray = new string[tempArray1.Length, tempArray2.Length]; 
       } 

       for (int j = 0; j < tempArray2.Length; j++) 
       { 
        newArray[i,j] = tempArray2[j]; 
       } 
      } 
Смежные вопросы