С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199

Редактирование текстового файла

24.03.2020, 09:57. Показов 3866. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня!
есть текстовый файл: D:\test\t1.txt
Подскажите пожалуйста, как с ним (по нажатии на одну кнопку) проделать следующие операции:

1. Убрать во всем файле двойные кавычки (") - то есть заменить " на пустое значение
2. в первой строке файла удалить весть текст до слова - "Дата"
3. найти в файле все строки начинающиеся на ФИО и удалить их полностью
4. удалить все ; в конце строки (их может быть несколько, в каждой строке по разному)
5. пройтись по всем строкам в файле, проверить, если после слова - Марка не стоит ; (точка с запятой) , то проставить ее.
6. сохранить изменения в файле под новым именем.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2020, 09:57
Ответы с готовыми решениями:

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

Редактирование текстового файла
Как редактировать определённую строку текстового файла, например: нам дан cfg.txt в нём 10 строк и мне нужно написать hello world на 8...

Редактирование текстового файла
Ребят помогите. Имеется такое задание: Если в строке четное количество слов, то удаляется каждое второе слово, при этом количество пробелов...

10
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
24.03.2020, 11:09
Лучший ответ Сообщение было отмечено KwaZZi как решение

Решение

KwaZZi,
VB.NET
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
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim source As List(Of String) = IO.File.ReadAllLines("path\name.txt", System.Text.Encoding.Default).ToList
        Dim index As Integer = InStr(source(0).ToLower, "дата")
        If index > 0 Then
            source(0) = source(0).Substring(index - 1) 'убираем из первой строки текст до "дата"
        End If
        For i = source.Count - 1 To 0 Step -1
            If source(i).ToLower.StartsWith("фио") Then
                source.RemoveAt(i) 'убираем всю строку, если она начинается с фио
                Continue For
            End If
            source(i) = Replace(source(i), Chr(34), "") 'убираем все "
            source(i) = RemoveSemicolon(source(i)) 'убираем все ; с конца
            Dim MarkInd As Integer = InStr(source(i).ToLower, "марка")
            If MarkInd > 0 Then
                If source(i).Substring(MarkInd + 4, 1) <> ";" Then
                    source(i) = source(i).Insert(MarkInd + 4, ";") 'ищем слово Марка и ставим после него ; если не стоит
                End If
            End If
        Next
        IO.File.WriteAllLines("path\newname.txt", source.ToArray, System.Text.Encoding.Default)
    End Sub
    Function RemoveSemicolon(ByVal str As String) As String 'функция убираем все ; с конца строки, пока не встретит любой другой знак
        Dim Count As Integer = 0
        For i = str.Length - 1 To 0 Step -1
            If str(i) = ";" Then
                Count += 1
            Else
                Exit For
            End If
        Next
        Return str.Substring(0, str.Length - Count)
    End Function
2
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199
24.03.2020, 14:28  [ТС]
Orlangur, подскажите еще, пожалуйста, как удалить те строки, в которых нет символа ; (точка с запятой)?

Добавлено через 13 минут
Orlangur, и еще момент.
Как пройтись по всем строчкам в файле и в строках, где есть больше одного пробела, заменить на один пробел?
Например строка в файле:
Иванов И.И.;8 (222)-21-33-11 ; Марка
Должна выглядеть вот так:
Иванов И.И.;8 (222)-21-33-11;Марка
0
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199
24.03.2020, 14:30  [ТС]
пробелы съел форум. приклоадываю, как картинку
Миниатюры
Редактирование текстового файла  
0
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
24.03.2020, 16:14
KwaZZi,
Цитата Сообщение от KwaZZi Посмотреть сообщение
как удалить те строки, в которых нет символа ;
изменить условие
VB.NET
1
2
3
4
 If source(i).ToLower.StartsWith("фио") Or source(i).Contains(";") = False Then
                source.RemoveAt(i) 'убираем всю строку, если она начинается с фио
                Continue For
            End If
Цитата Сообщение от KwaZZi Посмотреть сообщение
Как пройтись по всем строчкам в файле и в строках, где есть больше одного пробела, заменить на один пробел?
VB.NET
1
source(i) = String.Join(" ", source(i).Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries))
KwaZZi, Если строки будут большие, то метод, что убирает лишние пробелы вызовет тормоза
2
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199
30.03.2020, 12:54  [ТС]
Orlangur, Вопрос по этой же теме. подскажите пожалуйста, как можно подсчитать количество знаков ";" в строке (во всем документе), и если оно не равно 7, то проставить в конце строки ровно столько знаков ";", что бы их общее число было равно 7 в строке.

Заранее благодарю.
0
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
30.03.2020, 13:35
Лучший ответ Сообщение было отмечено KwaZZi как решение

Решение

KwaZZi, функция
VB.NET
1
2
3
4
5
6
7
8
9
 Function CheckSemicolon(ByVal str As String) As String
        Dim Count As Integer = str.Count(Function(c) c = ";")
        If Count < 7 Then
            For i = 1 To 7 - Count
                str &= ";"
            Next
        End If
        Return str
    End Function
Считываете файл как массив строк и каждую строку прогоняете через функцию
1
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199
30.03.2020, 15:47  [ТС]
Orlangur, Спасибо большое, получилось)
Подскажите, еще момент?

Как в текстовом файле можно поменять местами номера телефонов?
Если в строке их 2?, если 1 номер телефона, то все оставить как есть?

Все номера телефонов имеют следующий формат:
8 (921) 475-78-21

То есть проходим по всему фалу, находим в строке 2 номера телефона (номера телефона разделены ; - точкой с запятой) и меняем их местами:

Например, наткунлись на строку 2 номера телефона:
8 (921) 475-78-21 ; 8 (921) 475-32-71
поменяли местами
8 (921) 475-32-71 ; 8 (921) 475-78-21 , пошли дальше. В строке там где 1 номер телефона, ничего делать не надо, ищем дальше строки, там где 2 номера телефона.

В строках кроме номеров телефона так же еще есть другая информация.

Спасибо.
0
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
30.03.2020, 16:49
Лучший ответ Сообщение было отмечено KwaZZi как решение

Решение

KwaZZi, как вариант
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
 Function ChangeNumbers(ByVal str As String) As String
        Dim Result As String = ""
        Dim reg As New Regex("\(?\d{3}\)?-? *\d{3}-? *-?\d{2} *-?\d{2}")
        Dim Matches As MatchCollection = reg.Matches(str)
        If Matches.Count = 2 Then
            Dim phone1 As String = str.Substring(Matches(0).Index, 15)
            Dim phone2 As String = str.Substring(Matches(1).Index, 15)
            Result = str.Substring(0, Matches(0).Index) & phone2 & " ; 8 " & phone1 & str.Substring(Matches(1).Index + 15)
        Else
            Result = str
        End If
        Return Result
    End Function
1
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 199
30.03.2020, 17:08  [ТС]
Orlangur, спасибо, круто работает!!
Как я понимаю - Ваше решение основано на регулярках?
0
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
30.03.2020, 17:14
KwaZZi, да, но я в них ничего не понимаю) По уму надо переделать регулярку на поиск "номер1;номер2", а после этого попилить строку и сделать замены, это исключит те варианты, когда 2 номера будут в строке, но в разных местах
Либо делать как-то так
VB.NET
1
Result = str.Substring(0, Matches(0).Index) & phone2 & str.Substring(Matches(0).Index + 15, Matches(1).Index - Matches(0).Index - 15) & phone1 & str.Substring(Matches(1).Index + 15)
Чтобы поменять номера местами даже в том случае, если они находятся в разных частях строки
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.03.2020, 17:14
Помогаю со студенческими работами здесь

Редактирование текстового файла
Здравствуйте, есть текстовый файл для управления программой. Мне нужно найти этом файле определенную переменную и изменить ее...

Редактирование текстового файла
Доброго времени суток. Есть текст 1-я Благодатная Улица...

Редактирование текстового файла
Доброго времени суток. Подскажите, пожалуйста, как решить задачу: &quot;Написать функцию, которая удаляет лишние пробелы между словами и...

Редактирование текстового файла.
В общем есть задание: В текстовом файле хранятся строки, среди которых надо удалить те, которые начинаются на указанный текст. Например все...

Редактирование текстового файла
Здравствуйте, помогите с решением... Есть текстовый файл, в котором есть строка text1 123 text2, где 123 любое число, а text1 и text2...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 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