С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
.NET 4.x

Как извлечь из файла нужные строки?

01.12.2018, 19:37. Показов 4061. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть файл в котором хранятся нужные строчки которые нужно извлечь, для извлечения одной части записи работает такой код:

C#
1
string TLine = File.ReadAllLines(Text.df)[3].Split('"')[1];
Далее просто записываю найденные строки в файл.

Их можно как-нибудь совместить, чтобы можно было прочитать все данные из нужной колонки [3].Split('"')[1] и [11].Split('"'[7]

Как можно прочитать все нужные мне данные из нужного столба?

Вот что хранится в файле: ( Это не json, хотя очень похоже )

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"Logins"
{
  "895298918746"
  {
      "Name"        "UserName"
      "City"        "Moskow"
      "Date"        "12/10/18"
      "Num"         "14"
      "Timer"       "99999999"
  }
  "895283716281"
  {
    "Name"      "UserName"
    "City"        "Moskow"
    "Date"        "12/10/18"
    "Num"         "14"
    "Timer"       "99999999"
  }
}
Мне нужно получить значение 895298918746 и значение UserName из поля Name

И.т.д 895283716281 и значение UserName из поля Name

Добавлено через 1 час 3 минуты
UP...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2018, 19:37
Ответы с готовыми решениями:

Как извлечь из строки нужные символы
Столкнулся с такой проблемой: Пользователь вводит строку в формате БукваЦифра (без пробелов) и нужно поместить букву в одну переменную, а...

Как вывести из текстового файла нужные строки?
Добрый день! Помогите пожалуйста. Есть файл в котором содержатся много строк с разделителями: ...

Как получить список файлов в архиве и извлечь только нужные
Подскажите плиз, как получить список файлов в архиве и извлеч только нужные мне файлы в папку. Перебрал кучу примеров из инета для работы...

19
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
01.12.2018, 19:55
Лучший ответ Сообщение было отмечено chaleureux как решение

Решение

chaleureux,
C#
1
2
3
4
Regex rgx = new Regex("(\\d{12})|\"Name\"\\s+\"(\\S+)\"");
MatchCollection matches = rgx.Matches(строка с текстом);
foreach (Match match in matches)
    Console.WriteLine(match.Groups[1].Value + " " + match.Groups[2].Value);
1
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
01.12.2018, 20:17  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
rgx.Matches(строка с текстом);
А если у меня текст рандомный, как мне искать?
И объясните пожалуйста вот это регулярное выражение: (\\d{12})|"Name"\\s+"(\\S+)""
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
01.12.2018, 20:28
Цитата Сообщение от chaleureux Посмотреть сообщение
А если у меня текст рандомный
Это уже другой вопрос. Я ответил на тот что вы задали.
Цитата Сообщение от chaleureux Посмотреть сообщение
бъясните пожалуйста вот это
Сначала ищем сочетание подряд идущих цифр длиной 12 символов, так же ищем сочетание в одной строке "Name" + неопределенное количество пробелов, после чего идет неопределенное количество символов в кавычках. Скобки нужны для группировки (\d{12}) - первая группа, (\S+) - вторая группа.
1
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
01.12.2018, 20:37  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
Это уже другой вопрос.
А там уже всё про другому будет? Просто создавать подобный вопрос, может можно ответить и тут, был бы очень признателен.
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
01.12.2018, 20:49
chaleureux,
Смотря что значит рандомный текст, возможно этот паттерн будет и для него работать.
0
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
01.12.2018, 20:54  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
Смотря что значит рандомный текст
В файле появляются рандомные строки:
Номер телефона [3] "895298918746" ( все номера каждый столбик) столбик и значение UserName из поля Name
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
01.12.2018, 20:57
chaleureux, Ну вы попробуйте код. А потом скажите работает или нет. И пример текста приложите если не работает.
0
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
02.12.2018, 02:20  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
Ну вы попробуйте код. А потом скажите работает или нет. И пример текста приложите если не работает.
Код работает благодарю за пример)
А вопрос если мне нужно добавить доп поиск поля это мне нужно сделать так:
C#
1
Regex rgx = new Regex("(\\d{12})|\"Name\"\|\"City\"\\s+\"(\\S+)\"");
? Я проверил у себя оно как бы сработало но первый параметр не ищет
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
02.12.2018, 10:46
chaleureux,
C#
1
(\d{12})|"Name"\s+"(\S+)"|"City"\s+\"(\S+)"
0
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
02.12.2018, 17:55  [ТС]
PoPsa85,
Показывает ошибки:
Миниатюры
Как извлечь из файла нужные строки?  
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
02.12.2018, 21:38
chaleureux, Ну вам кавычки и слэши надо экранировать. Как в коде выше.
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
02.12.2018, 21:43
Regex rgx = new Regex("(\\d{12})|"Name"\|"City"\\s+"(\\S+)"");
C#
1
Regex rgx = new Regex("(\\d{12})|\"Name\"\\s+\"(\\S+)\"|\"City\"\\s+\"(\\S+)\"");
1
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
03.12.2018, 01:27  [ТС]
Andreyip, PoPsa85,
C#
1
2
Regex rgx = new Regex("(\\d{12})|\"Name\"\\s+\"(\\S+)\"|\"City\"\\s+\"(\\S+)\"");
Console.WriteLine(match.Groups[1].Value + " " + match.Groups[2].Value);
Первое значение находит, а второе и остальные нет. В чём может быть причина?
Даже пробовал так
C#
1
match.Groups["City"].Value
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
03.12.2018, 01:28
chaleureux, Ну так Groups[3].Value
C#
1
Console.WriteLine(match.Groups[1].Value + " " + match.Groups[2].Value + " " + match.Groups[3].Value);
0
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
03.12.2018, 01:34  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
Ну так Groups[3].Value
Так я и так пробовал, просто пусто ничего не показывает.
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
03.12.2018, 02:03
chaleureux, Проверил с текстом что в первом посте
Миниатюры
Как извлечь из файла нужные строки?  
0
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260
03.12.2018, 02:25  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
Проверил с текстом что в первом посте
Очень странно, а у меня просто пусто, ничего не записывает.
А можно как-нибудь проверить имеет ли какие-то данные в файле ?
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
03.12.2018, 10:49
chaleureux, Код сначала свой проверьте. Нет ли ошибок в паттерне. Ну и с помощью отладчика посмотрите. Точку поставте на строке с Console.WriteLine
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
04.12.2018, 02:01
В порядке бреда реализация на основе dynamic
Кликните здесь для просмотра всего текста
Code
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
void Main()
{
    string text = @"""Logins""
{
  ""895298918746""
  {
      ""Name""        ""UserName1""
      ""City""        ""Moskow""
      ""Date""        ""12/10/18""
      ""Num""         ""14""
      ""Timer""       ""99999999""
  }
  ""895283716281""
  {
    ""Name""      ""UserName2""
    ""City""        ""Moskow""
    ""Date""        ""12/10/18""
    ""Num""         ""14""
    ""Timer""       ""99999999""
  }
}";
 
    char[] spaces = {' ', '\t'};
    dynamic data = new Eyjafjallajökull();
    StringReader reader = new StringReader(text);
    string line = reader.ReadLine(); // first
    reader.ReadLine(); // {
    string name = reader.ReadLine();
    while (true)
    {
        name = name.Trim(' ', '"');
        reader.ReadLine(); // {
        while ((line = reader.ReadLine().Trim()) != "}")
        {
            string[] nameValue = line.Split(spaces, StringSplitOptions.RemoveEmptyEntries);
            nameValue[0] = nameValue[0].Trim(' ', '"');
            nameValue[1] = nameValue[1].Trim(' ', '"');
            data[name][nameValue[0]] = nameValue[1];
        }
        line = reader.ReadLine();
        if (line == "}") break;
        name = line;
    }
    
    foreach (string topKey in data.GetAllKeys())
    {
        Console.WriteLine("{0}: Name: {1}; City: {2}", topKey, data[topKey].Name, data[topKey].City);
    }
}
 
class Eyjafjallajökull : DynamicObject
{
    Dictionary<string, dynamic> _keysDictionary = new Dictionary<string, dynamic>();
    
    public string[] GetAllKeys()
    {
        return _keysDictionary.Keys.Cast<string>().ToArray();
    }
 
    public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result)
    {
        result = null;
        if (indexes.Length != 1 || indexes[0].GetType() != typeof(string)) return false;
        
        string key = ((string)indexes[0]).ToLower();
        dynamic dynamicDictionary;
        if (!_keysDictionary.TryGetValue(key, out dynamicDictionary))
        {
            dynamicDictionary = new DynamicDictionary();
            _keysDictionary.Add(key, dynamicDictionary);
        }
        result = dynamicDictionary;
        return true;
    }
    
    class DynamicDictionary : DynamicObject
    {
        Dictionary<string, string> dictionary = new Dictionary<string, string>();
 
        public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result)
        {
            result = null;
            if (indexes.Length != 1 || indexes[0].GetType() != typeof(string)) return false;
            
            return TryGetValue(((string)indexes[0]).ToLower(), out result);
        }
 
        public override bool TrySetIndex(SetIndexBinder binder, object[] indexes, object value)
        {
            if (indexes.Length != 1 || indexes[0].GetType() != typeof(string)) return false;
            
            dictionary[((string)indexes[0]).ToLower()] = (string)value;
            return true;
        }
 
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            return TryGetValue(binder.Name.ToLower(), out result);
        }
 
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            dictionary[binder.Name.ToLower()] = (string)value;
            return true;
        }
        
        bool TryGetValue(string key, out object result)
        {
            if (dictionary.ContainsKey(key))
            {
                result = dictionary[key];
                return true;
            }
            
            result = null;
            return false;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2018, 02:01
Помогаю со студенческими работами здесь

Как сделать программу что бы она из файла выводила нужные мне строки?
Какие использовать компаненты в Buildere? В какой компанент вставлять файл? В какой компаненте он будет выводить файл? Заранее спасибо!

Как извлечь подстроку из строки, считанной с файла
Привет всем! Подскажите пожалуйста, как реализовать на vb вывод указанных символов. Есть данные в файле, к примеру 12:05:24, как...

Выбрать из файла нужные строки (Java)
Здравствуйте, учусь работе с файлами на java. Никак не могу разобраться как заставить выбирать нужные строки программу и записывать только...

Из исходного файла вывести нужные строки из 3-его параметра в текстовый файл 2
Из исходного(paramstr(1)) файла вывести нужные строки из 3-его параметра(paramstr(3)) в текстовый файл 2(Paramstr(2)). uses crt; ...

Извлечь i-й элемент каждой строки файла
Всем привет. Такая проблема, имеется результаты работы прибора записанный в f.txt 1 1.919 3.251 2.614 3.631 2.610 8.804 10.194 6.028...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru