powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запись в строковый массив
5 сообщений из 30, страница 2 из 2
Запись в строковый массив
    #38515430
XXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79XXLЧитать значения нужно из всех строк с индексом 1 и с индексом 9 по всему файлу.
Непонятно. Допустим, строка 1 - это дата. Почему строка 9 у вас 6 по списку? Вы определитесь, выбирать по значению первого поля или по номеру строки после даты

выбирать по значению первого поля
...
Рейтинг: 0 / 0
Запись в строковый массив
    #38515448
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XXLвыбирать по значению первого поля
По первому полю у вас дата, и там 254. Так что никак по значению не взять

Вот вариант для поиска девятки в определенной дате. Замените код:
Код: c#
1.
2.
3.
                //Console.WriteLine(String.Join(" ", keyValuePairs[4].Value));
                KeyValuePair<DateTime, List<string>> nullableValue = keyValuePairs.FirstOrDefault(p => p.Value[0].Trim() == "9");
                Console.WriteLine(String.Join(" ", nullableValue.Value ?? new List<string>(new[] {"Empty"})));
...
Рейтинг: 0 / 0
Запись в строковый массив
    #38515451
XXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
    class Program
    {
        static void Main(string[] args)
        {
            Console.WindowWidth = 150;
            Console.BufferHeight = 10000;

            const string filePath = @"C:\Users\Arm79\Downloads\файл\файл\1.tmp";

            // показания сгруппированы по дням, признак дня - значение 254
            // по умолчанию будет текущий (это по логике неправильно, зато код стройный и красивый)
            var currentMoment = DateTime.Now;
            var rows = new List<KeyValuePair<DateTime, List<string>>>();

            // 1) Parsing
            foreach (var line in File.ReadLines(filePath))
            {
                var currentRow = line;

                // за исключением строки с датой все остальные строки имеют на поле всего 7 символов. Номер строки с датой тоже подчиняется этому правилу
                List<string> columns;
                if (line.Substring(0, 7).Trim() == ("254"))    
                {
                    columns = currentRow.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries).ToList();
                    currentMoment = DateTime.ParseExact(String.Format("{0} {1} {2}", columns[2], columns[3], columns[4]), "d MMM yyyy", new CultureInfo("en-US"));
                }
                else
                {
                    columns = SplitToList(currentRow);
                }

                rows.Add(new KeyValuePair<DateTime, List<string>>(currentMoment, columns));
            }

            // 2) Selecting
            var dateTimes = rows.Select(r => r.Key).Distinct();
            foreach (DateTime dateTime in dateTimes)
            {
                var keyValuePairs = rows.SkipWhile(r => r.Key != dateTime).TakeWhile(r => r.Key == dateTime).ToArray();
                Console.WriteLine(String.Join(" ", keyValuePairs[0].Value));
                Console.WriteLine(String.Join(" ", keyValuePairs[4].Value));
            }

            Console.ReadLine();
        }

        private static List<string> SplitToList(string stringRow)
        {
            var result = new List<string>();

            var index = 0;
            while (index != stringRow.Length)
            {
                string currentValue = stringRow.Substring(index, 7);
             
                // Тут сложность, N и E попадают в другое поле, а относятся к предыдущему. Исправляем несправедливость во имя Луны!
                if (currentValue.StartsWith("N") || currentValue.StartsWith("E"))
                {
                    result[result.Count - 1] += currentValue[0];
                    currentValue = currentValue.Remove(0, 1);
                }

                result.Add(currentValue);
                index = index + 7;
            }

            return result;
        }
    }



Выдает мне ошибку:
автор
...
Рейтинг: 0 / 0
Запись в строковый массив
    #38515453
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня работает
...
Рейтинг: 0 / 0
Запись в строковый массив
    #38515463
XXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запись в строковый массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]