Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56

Спарсить из TXT файла

03.07.2013, 19:07. Показов 1412. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые пользователи этого замечательного форума !
Прошу помощи. В вкратце обьясню что нужно.
Есть txt файл следующего содержания:
Code
1
2
3
4
5
6
7
8
9
----------------------------
Фамилия: Василёв
Имя: Вася
Отчество: Васильевич
 
--------------------------
Фамилия: Василёв1
Имя: Вася1
Отчество: Васильевич1
И так далее, много таких строк.

Есть DataGridView с заголовками Фамилия, Имя, Отчество.
Так вот мне нужно спарсить все значения из txt файла и поместить их в DataGridView.
Заранее большое спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.07.2013, 19:07
Ответы с готовыми решениями:

Файл: Переписать текст в t3.txt сначала из файла t1.txt, а потом из файла t2.txt
1) Переписать текст в t3.txt сначала с файла t1.txt, а потом с файла t2.txt 2) Файл t2.txt перенесите в папку K2 3) Файл t1.txt...

Записать в файл out.txt те числа из файла inp.txt, которые НЕ кратны k
Заполнить файл inp.txt N натуральными числами. Записать в файл out.txt те числа из файла inp.txt (числа считываются непосредственно из...

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

9
 Аватар для Закревский
184 / 184 / 29
Регистрация: 14.04.2013
Сообщений: 499
03.07.2013, 19:11
А код у вас есть?
0
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
03.07.2013, 19:13  [ТС]
Цитата Сообщение от Закревский Посмотреть сообщение
А код у вас есть?
К сожалению нету, так как я не знаю как спарсить из файла эти строки.
0
 Аватар для Закревский
184 / 184 / 29
Регистрация: 14.04.2013
Сообщений: 499
03.07.2013, 19:27
как-то так:
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
string buf;
streamReader sr=new StreamReader(путь к файлу);
while(!sr.EndOfStream)
{
buf=sr.ReadLine();
if(buf.IndexOf('-')<0 && buf!="")
{
if(buf[0]='Ф')
{
for(int i=buf.IndexOf(':');i<buf.Length;i++)
строка фамилии в DataGrid+=buf[i];
}
if(buf[0]='И')
{
for(int i=buf.IndexOf(':');i<buf.Length;i++)
строка имени в DataGrid+=buf[i];
}
if(buf[0]='О')
{
for(int i=buf.IndexOf(':');i<buf.Length;i++)
строка отчества в DataGrid+=buf[i];
}
}
}
1
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
04.07.2013, 05:06  [ТС]
Цитата Сообщение от Закревский Посмотреть сообщение
как-то так:
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
string buf;
streamReader sr=new StreamReader(путь к файлу);
while(!sr.EndOfStream)
{
buf=sr.ReadLine();
if(buf.IndexOf('-')<0 && buf!="")
{
if(buf[0]='Ф')
{
for(int i=buf.IndexOf(':');i<buf.Length;i++)
строка фамилии в DataGrid+=buf[i];
}
if(buf[0]='И')
{
for(int i=buf.IndexOf(':');i<buf.Length;i++)
строка имени в DataGrid+=buf[i];
}
if(buf[0]='О')
{
for(int i=buf.IndexOf(':');i<buf.Length;i++)
строка отчества в DataGrid+=buf[i];
}
}
}
Благодарю Вас за быстрый ответ, но я имел ввиду немного другое, я хотел сделать так:

C#
1
2
3
4
5
6
7
 class People
        {
            public String Name;
            public String Surname;
            public String Lastname;
        }
      List<People> lc = спарсить значения из txt файла.
А вот как умно спарсить не знаю.

Делал подобный парсер для стринг листа:

C#
1
2
3
4
5
6
7
8
9
10
11
  public List<string> ParseToList(string all, string l, string r)
        {
            List<string> list = new List<string>();
            Regex g5 = new Regex(l + "(.*?)" + r);
            if (g5.IsMatch(all))
            {
                MatchCollection matches = g5.Matches(all);
                foreach (Match y in matches) { list.Add((y.Groups[1]).ToString()); }
            }
            return list;
        }
Использовать так:
C#
1
List<string> test = ParseToList("Матчес","Значение0","Значение1");
Добавлено через 9 часов 20 минут
Актуально, всё ещё не решил...
0
338 / 327 / 154
Регистрация: 29.10.2012
Сообщений: 949
04.07.2013, 06:04
Можно во так распарсить, но только при условии, что ФИО будут идти именно в этом порядке, сначала Фамилия потом Имя затем Отчество.
Метод, который принимает на входе имя файла, и возвращает список объектов с ФИО.
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
        public List<People> ReadTxtFile(string fileName)
        {
            List<People> lp = new List<People>();
 
            StreamReader sr = new StreamReader(fileName);
            string s;
            while (!sr.EndOfStream)
            {
                People p = new People();
                s = sr.ReadLine();
                //Проверяем если в первой строке не Фамилия то обрываем итерацию цикла
                if (s.IndexOf("Фамилия:") < 0) continue;
                p.Surname = s.Replace("Фамилия:", "").Trim();
 
                if (sr.EndOfStream) continue;
                s = sr.ReadLine();
                p.Name = s.Replace("Имя:", "").Trim();
 
                if (sr.EndOfStream) continue;
                s = sr.ReadLine();
 
                p.Lastname = s.Replace("Отчество:", "").Trim();
                lp.Add(p);
            }
            return lp;
        }
Вот вспомогательный класс:
C#
1
2
3
4
5
6
    class People
    {
        public string Name {get;set;}
        public string Surname { get; set; }
        public string Lastname { get; set; }
    }
1
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
04.07.2013, 06:46  [ТС]
Цитата Сообщение от kmaffa Посмотреть сообщение
Можно во так распарсить, но только при условии, что ФИО будут идти именно в этом порядке, сначала Фамилия потом Имя затем Отчество.
Метод, который принимает на входе имя файла, и возвращает список объектов с ФИО.
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
        public List<People> ReadTxtFile(string fileName)
        {
            List<People> lp = new List<People>();
 
            StreamReader sr = new StreamReader(fileName);
            string s;
            while (!sr.EndOfStream)
            {
                People p = new People();
                s = sr.ReadLine();
                //Проверяем если в первой строке не Фамилия то обрываем итерацию цикла
                if (s.IndexOf("Фамилия:") < 0) continue;
                p.Surname = s.Replace("Фамилия:", "").Trim();
 
                if (sr.EndOfStream) continue;
                s = sr.ReadLine();
                p.Name = s.Replace("Имя:", "").Trim();
 
                if (sr.EndOfStream) continue;
                s = sr.ReadLine();
 
                p.Lastname = s.Replace("Отчество:", "").Trim();
                lp.Add(p);
            }
            return lp;
        }
Вот вспомогательный класс:
C#
1
2
3
4
5
6
    class People
    {
        public string Name {get;set;}
        public string Surname { get; set; }
        public string Lastname { get; set; }
    }
Спасибо за Ваш ответ. Почти то что мне нужно, но что делать в том случае если имя, отчество, фамилия написаны не по порядку ? Может спарсить всё в стринг лист по отдельности(List<string> name,List<string> surname...td), а после с помощью Foreach в List<People> ? Но на этом этапе меня интересует сам парсинг, как с помощью регулярки спарсить имя, фамилию, отчество в стринг лист ?
0
338 / 327 / 154
Регистрация: 29.10.2012
Сообщений: 949
04.07.2013, 07:35
Вот если не по порядку:
Метод:
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
        static public List<People> ReadTxtFile(string fileName)
        {
            string f = "Фамилия:", n = "Имя:", o = "Отчество:";
 
            List<People> lp = new List<People>();
 
            StreamReader sr = new StreamReader(fileName);
            string s;
 
            People p = new People();
            while (!sr.EndOfStream)
            {
                if (p.NotEmpty())
                {
                    lp.Add(p);
                    p = new People();
                }
                s = sr.ReadLine();
                if (s.IndexOf(f) >= 0)
                    p.Surname = s.Replace(f, string.Empty);
                else if (s.IndexOf(n) >= 0)
                    p.Name = s.Replace(n, string.Empty);
                else if (s.IndexOf(o) >= 0)
                    p.Lastname = s.Replace(o, string.Empty);
            }
            return lp;
        }
Класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    class People
    {
        public string Name {get;set;}
        public string Surname { get; set; }
        public string Lastname { get; set; }
 
        public People()
        {
            Name = string.Empty;
            Surname = string.Empty;
            Lastname = string.Empty;
        }
 
        public bool NotEmpty()
        {
   if ((Name != string.Empty) && (Surname != string.Empty) && (Lastname != string.Empty))
                return true;
            else
                return false;
        }
    }
0
 Аватар для FrostByte
104 / 104 / 19
Регистрация: 23.05.2013
Сообщений: 185
04.07.2013, 07:52
Цитата Сообщение от Qfeed Посмотреть сообщение
Почти то что мне нужно, но что делать в том случае если имя, отчество, фамилия написаны не по порядку
Отформатировать документ так, чтобы все записи были оформлены в едином формате.

Вот вариант с регулярными выражениями, формат(фамилия, имя отчество):
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
class People
        {
            public People(string lName, string name, string mName)
            {
                this.LName = lName;
                this.Name = name;
                this.MName = mName;
            }
 
            private string LName { get; set; }
            private string Name { get; set; }
            private string MName { get; set; }
            public override string ToString()
            {
                return String.Format("{0} {1} {2}", LName, Name, MName);
            }
        }
        public static void Main()
        {
            const string text = "" +
                                "Фамилия: Василёв\n" +
                                "Имя: Вася\n" +
                                "Отчество: Васильевич\n" +
                                "--------------------------\n" +
                                "Фамилия: Василёв1\n" +
                                "Имя: Вася1\n" +
                                "Отчество: Васильевич1";
            List<People> peoples = new List<People>();
            MatchCollection regex = Regex.Matches(text, @"\w+:\s(?<lName>\w+)[^\w]+\w+:\s(?<Name>\w+)[^\w]+\w+:\s(?<mName>\w+)");
            foreach (Match match in regex)
            {
                peoples.Add(new People(match.Groups["lName"].Value, match.Groups["Name"].Value, match.Groups["mName"].Value));
            }
            
        }
1
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 56
04.07.2013, 14:28  [ТС]
Цитата Сообщение от FrostByte Посмотреть сообщение
Отформатировать документ так, чтобы все записи были оформлены в едином формате.

Вот вариант с регулярными выражениями, формат(фамилия, имя отчество):
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
class People
        {
            public People(string lName, string name, string mName)
            {
                this.LName = lName;
                this.Name = name;
                this.MName = mName;
            }
 
            private string LName { get; set; }
            private string Name { get; set; }
            private string MName { get; set; }
            public override string ToString()
            {
                return String.Format("{0} {1} {2}", LName, Name, MName);
            }
        }
        public static void Main()
        {
            const string text = "" +
                                "Фамилия: Василёв\n" +
                                "Имя: Вася\n" +
                                "Отчество: Васильевич\n" +
                                "--------------------------\n" +
                                "Фамилия: Василёв1\n" +
                                "Имя: Вася1\n" +
                                "Отчество: Васильевич1";
            List<People> peoples = new List<People>();
            MatchCollection regex = Regex.Matches(text, @"\w+:\s(?<lName>\w+)[^\w]+\w+:\s(?<Name>\w+)[^\w]+\w+:\s(?<mName>\w+)");
            foreach (Match match in regex)
            {
                peoples.Add(new People(match.Groups["lName"].Value, match.Groups["Name"].Value, match.Groups["mName"].Value));
            }
            
        }
То что нужно, огромное Вам спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2013, 14:28
Помогаю со студенческими работами здесь

Дополнить .txt файл из другого .txt файла недостающими данными
Доброго времени суток. Подскажите как осуществить такую операцию с текстовым файлом. К примеру, первый файл обновляется с сайта и...

Спарсить два взаимосвязанных файла
Всем привет ! :) У меня есть 2 файла, вот к примеру: 1 файл &lt;Object Angles=&quot;0,-0,-179.99998&quot; dir=&quot;90&quot;...

TXT файл спарсить на страницы
Есть книга в виде txt файла 157 уроков по 10-30 слов в каждом уроке, нужно каждый урок закинуть отдельный колонку в mysql базе чтобы каждый...

Спарсить HTML или txt файлю
Было решено сделать проверку как у Яндекса и у Гугла. Тоесть добавляешь сайт, они дают файл html с определенным ключем. Я хочу сделать...

В папке К2 создайте файл t3.txt, в который перепишите вначале текст из файла t1.txt, а затем из t2.txt
Программным путем: 1. В папке С:\temp создайте папки К1 и К2. 2. В папке К1: a) создайте файл t1.txt, в который запишите следующий...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru