2015-04-27 3 views
0

В C, я был в состоянии прочитать определенную часть текстового файла, как это:Как я могу прочитать определенную часть текстового файла?

game_results new_statistic(FILE* input, int* rounds) { 
    game_results out; 

    char temp[300]; 
    if(fgets(temp, 300, input) != NULL) { 
     if(strlen(temp) < 3) { 
     fgets(temp, 300, input); 
     ++*rounds; 
     } 

    /* Sorting the string and giving all the variables to the struct game_results */ 
    sscanf(temp, "%s %d/%d %s %s - %s %d - %d %lf" , out.weekday, &out.date_day, &out.date_month, out.timet, 
    out.hometeam, out.awayteam, &out.home_goal, &out.away_goal, &out.crowd); 
    out.rounds = *rounds; 
    } 
    return out; 
} 

Как это можно сделать, как, что в C#?

Мне нужна конкретная информация, которая находится в текстовом файле. Я хочу прочитать значение количества комнат, тогда программа должна знать, что первое имя комнаты является «Stue» и имеет значение 1, которое представляет собой силовые разъемы в комнате. Затем он будет читать «tv», затем 200, который является powerusage, и 3 для standbyusage. Тогда он будет делать то же самое для кухонной комнаты.

текст в файле выглядит следующим образом:

Amount of Rooms: 2 
Stue, 1 
tv, 200, 3 
Kitchen, 1 
Fridge, 100, 2 
+0

Я пробовал разные вещи. Но я не могу найти решение, подобное тому, которое я сделал с C. Я знаю, что C# - это другой язык, но было бы неплохо, если бы можно было что-то сделать. Код C находится в пастебине. – darophi

+0

Для тех из нас, кто знает C#, но не C, вам, возможно, придется более подробно объяснить, что вам нужно от текстового файла и в каком формате. Проверьте ['File.ReadLines()'] (https://msdn.microsoft.com/en-us/library/dd383503 (v = vs.110) .aspx). –

+0

Какие другие вещи вы пробовали? Покажите свое усилие и точку, где он не работает. Мы могли бы помочь вам после этого. –

ответ

0

, если информация по той же схеме каждый раз простой способ сделать это было бы с StreamReader

 System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\Public\TestFolder\EXPORT.TXT"); 
     while (file.Peek() != -1) 
     { 
      line = file.ReadLine(); 
      string test1; 
      string readdate; 
      test1 = line.Substring(0, 8);//1 
      FullName = line.Substring(8, 20);//2 
      Address = line.Substring(28, 20);//3 
      ModuleNumber = line.Substring(48, 10);//4 
      test1 = line.Substring(58, 4);//5 
      ReadType = line.Substring(62, 1);//6 
      Service = line.Substring(63, 1);//7 
      test1 = line.Substring(64, 1);//8 
      test1 = line.Substring(65, 2);//9 
      test1 = line.Substring(67, 9);//10 
     } 

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

EDIT: Я бы очень хотел, чтобы это можно было добавить в комментарии, но поскольку мне не разрешено комментировать, я поставил это как ответ с чуть более подробной информацией.

1

Вы можете использовать метод File.ReadLines, чтобы открыть файл и запросить его для данных, которые вам нужны, и он будет читать только строки, чтобы удовлетворить ваш запрос.

Итак, чтобы получить первую строку, используйте метод LINQ First(), затем разделите его на двоеточие и возьмите его.

var rooms = Convert.ToInt32(File.ReadLines(@"c:\yourFile.txt").First().Split(':').Last()); 

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

Читать все исключая первую строку (пропустите), затем разделите запятую и создайте словарь.

var data = (from f in File.ReadLines(@"c:\yourFile.txt").Skip(1) 
      let parts = f.Split(',') 
      select new { key = parts[0], value = Convert.ToInt32(parts[1]) }) 
      .ToDictionary(x => x.key, x => x.value);