2014-12-26 5 views
0

Я не уверен, как это сделать, поэтому я надеюсь, что кто-то может помочь. У меня есть текстовый файл в следующем формате:Сплит текстовый файл в массив

2014-12-24: 
119: 
r2 
20 
10 
r1 
24 
r31 
2014-12-25: 
10: 
5 
r5 
r7 
2014-12-26: 
15: 
4 
2 
4 

и так далее ...

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

Может ли кто-нибудь указать мне в правильном направлении? Как всегда, любая помощь приветствуется - спасибо много и счастливых праздников

+2

Почему вы указываете как 'C#', так и' iOS'? 'iOS' использует' Objective-C', который не совпадает с ошибкой 'C#' – opewix

+0

, это было на самом деле для Objective-C (таким образом, тег IOS) ... так что по-прежнему нужен этот ответ, поскольку Kampai решил, что я имею в виду C# – Jay

ответ

3
List<string> lines = new List<string>(); 
List<DateTime> dates = new List<DateTime>(); 

using (StreamReader sr = new StreamReader(File.OpenRead("Input.txt"))) 
{ 
    while (sr.EndOfStream == false) // read all lines in file until end 
    { 
     string line = sr.ReadLine(); 
     if(line == null) continue; 

     lines.Add(line); // storing line in collection 

     // ensuring the line has date, you also may specify date pattern 
     DateTime tempDateTime; 
     if (DateTime.TryParse(line.Replace(":", ""), out tempDateTime)) 
     { 
      // this line has DateTime 
      dates.Add(tempDateTime); 
     } 
    } 
} 
+0

pls добавить разделенные значения в массив –

+0

Я добавил коллекцию 'lines'. Все строки хранятся там. – opewix

+0

Могу ли я привести пример в Objective-c? – Jay

0

Почему бы не использовать Regex

Вот пример кода

using System; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    using System; 
    using System.Text.RegularExpressions; 

    class Program 
    { 
     static void Main() 
     { 
      string pat = @"\d{4}-\d{2}-\d{2}\:"; 

      // Instantiate the regular expression object. 
      Regex r = new Regex(pat, RegexOptions.IgnoreCase); 


      String line; 
      System.IO.StreamReader file = new System.IO.StreamReader(@"C:\PATH\Filename.txt"); 
      while ((line = file.ReadLine()) != null) 
      { 
           Match m = r.Match(line); 
      if (m.Success) 
      { 
       // A date is found ; make new List/some data structure to extract data on this date 
       Console.WriteLine("Date : {0}",m.Value); 
      } 
      else 
      { 
       Console.WriteLine("\tVales {0} ",line); 
      } 
      } 

      Console.ReadKey(); 
     } 
    } 
} 
1

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

static void Main(string[] args) 
    { 
     string[] lines = File.ReadAllLines(@"D:\test.txt"); 
     string[] firstArray = new string[7]; 
     string[] secondArry = new string[4]; 
     string[] thirdArry = new string[4]; 
     int i = 0, index = 0; 

     foreach (var item in lines) 
     { 
      var date = item.Trim(new char[] { ':' }); 
      DateTime dt; 

      if (DateTime.TryParse(date, out dt)) 
      { 
       i = 0; 
       index = index + 1; 
      } 
      else 
      { 
       if (index == 1) 
        firstArray[i] = item.ToString(); 
       if (index == 2) 
        secondArry[i] = item.ToString(); 
       if (index == 3) 
        thirdArry[i] = item.ToString(); 

       i++; 
      } 
     } 

     foreach (var array1 in firstArray) 
     { 
      Console.WriteLine(array1.ToString()); 
     } 

     foreach (var array2 in secondArry) 
     { 
      Console.WriteLine(array2.ToString()); 
     } 

     foreach (var array3 in thirdArry) 
     { 
      Console.WriteLine(array3.ToString()); 
     } 
    } 
Смежные вопросы