С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/40: Рейтинг темы: голосов - 40, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 36
1

Удалить определенную строку в txt файле

28.02.2017, 17:49. Показов 7476. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, необходимо удалить строку в txt файле, во вложении пример, с файла удаляет все, а нужно, чтобы удалило одну строку и не оставляло пустое место
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim Filen
Dim k As Integer
Dim tS As String
Filen = FreeFile
 
Open ("C:\TIME\hours.txt") For Output As #Filen
 
For k = 1 To Val(Label1) + 1
Print #Filen, tS
Next k
If k = Val(Label1) Then Print #Filen,
Close #Filen
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
28.02.2017, 17:49
Ответы с готовыми решениями:

Запись из TextBox в .txt файл в определенную строку
Подскажите пожалуйста: Имеется Text box, как сделать так чтобы после ввода в него текста и нажатию...

Необходимо в текстовом файле найти определенную строку, в которой имеется спец.символ и удалить строку
К примеру в файле есть записи: Привет Привет Хороший День Мне нужно, что бы запись с символом...

Как удалить определённую строку в файле?
Дан файл, в нём содержится текст.Удалить определённую строку. Удаление происходит через запрос...

Как удалить определенную строку в файле по индексу?
как удалить определенную строку в файле по индексу в c#

25
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.02.2017, 21:29 2
Надо вначале построчно считать файл куда нибудь, например в массив строк. Потом переписать старый фал уже из этого массива, но без нежелательной строки.

Примерно можно так написать:
Visual Basic
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
Private Sub Command1_Click()
' Перезапись файла с удалением строки
Dim St(10) As String
Open "c:\1.txt" For Input As #1
    Dim S As String
    While Not EOF(1)
        n = n + 1
        Input #1, S
        St(n) = S
    Wend
Close #1
 
Open "c:\1.txt" For Output As #1
    For i = 1 To 10
        If i <> 7 Then ' Убираем 7-ю строку
            Print #1, St(i)
        End If
    
    Next
Close #1
End Sub
 
Private Sub Form_Load()
' Создадим файл на 10 строк
Open "c:\1.txt" For Output As #1
For i = 1 To 10
    Print #1, "String №" & i
Next
Close #1
End Sub
2
141 / 119 / 29
Регистрация: 12.02.2017
Сообщений: 308
01.03.2017, 00:32 3
Я обычно пользуюсь несколько иной формой

Добавлено через 1 минуту
Visual Basic
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
Sub FileEdit(sFileName As String)
    Dim iSource As Long
    Dim iTarget As Long
    Dim sLine As String
    Dim sTmpFile As String
    iSource = FreeFile
    Open sFileName For Input As #iSource
        sTmpFile = Left(sFileName, InStrRev(sFileName, ".")) & "t~"
        iTarget = FreeFile
        Open sTmpFile For Output As #iTarget
            Do Until EOF(iSource)
                Line Input #iSource, sLine
                Select Case sLine
                Case "bad_condition1"
                Case "bad_condition2"
                '....
                Case Else
                    Print #iTarget, sLine
                End Select
            Loop
        Close #iTarget
    Close #iSource
    Kill sFileName
    Name sTmpFile As sFileName
End Sub
Добавлено через 4 минуты
Но у Pro_grammer'а код более безопасен, у меня используется оператор килл, если кто захочет использовать мой вариант пусть будет внимателен.
1
oh my god
1455 / 794 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
01.03.2017, 12:25 4
А у меня можно быть и не внимательным
защита от "дурака" включена ))
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
 
Private Sub Form_Load()
    Dim i&, j&, a$(), aa$(), fl$
    ChDir Environ("SystemDrive")
    With CreateObject("scripting.filesystemobject")
        While Not .FileExists(fl): fl = InputBox("Введите правильный путь к файлу", , "\TIME\hours.txt"): Wend
        a = Split(.OpenTextFile(fl).ReadAll, vbCrLf): If UBound(a) = 0 Then MsgBox "Пусто.": End
        While j < 1 Or j > UBound(a) + 1: j = Val(InputBox("Укажи строчку удаления от 1 до " & UBound(a) + 1, , 0)): Wend
        If MsgBox("Строчка:" & vbLf & Left(a(j - 1), 10) & "..." & vbLf & "Будем удалять ?", 68) = vbNo Then End
        ReDim aa$(UBound(a) - 1)
        For i = 0 To UBound(a) - 1: aa(i - Abs(i >= j)) = a(i): Next
        .CreateTextFile(fl).Write Join(aa, vbCrLf)
        MsgBox "Строчка " & j & " успешно удалена, диалог окончен." & vbLf & "Досвидания."
    End With
    End
End Sub
1
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 36
02.03.2017, 13:38  [ТС] 5
Добавлено через 31 секунду
Homarty, Спасибо большое) Подставила, подскажите, как прописать количество строк (For i= To) , чтобы не само забивало цифрами файл (например, до 100), а оставило пустые строки (ограничивалось уже существующими строками в файле)
Visual Basic
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
Open "C:\TIME\hours.txt" For Input As #1
Dim S As String
While Not EOF(1)
N = N + 1
Input #1, S
St(N) = S
Wend
Close #1
 
Open "C:\TIME\hours.txt" For Output As #1
For i = 1 To 100
If i <> Val(Label1) Then
Print #1, St(i)
End If
 
Next
Close #1
End Sub
 
Private Sub Form_Load()
 
Open "C:\TIME\hours.txt" For Output As #1
For i = 1 To 100
Print #1, "" & i
Next
Close #1
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
02.03.2017, 15:53 6
Pro_grammer
А зачем считывать файл в массив строк?
Не будет ли проще сразу переписать файл, пропустив
при этом одну или несколько ненужных строк.
0
oh my god
1455 / 794 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
02.03.2017, 16:33 7
Цитата Сообщение от Tawan12 Посмотреть сообщение
чтобы не само забивало цифрам
Не совсем понятно что требуется, в примере программера в загрузке формы
автоматически заполняется файл числами, это место можно закоментировать

И почему никого не волнует абсолютный путь
ну нету у меня диска C:, нужно грамотно писать пути

В примере я кое что поправил
Visual Basic
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
Option Explicit
Dim ff&, v
 
Private Sub Form_Click()
    Dim i&
    ff = FreeFile
    Open "\TIME\hours.txt" For Input As #ff
    ReDim st$(1 To 1)
    While Not EOF(ff)
        i = i + 1
        If i > UBound(st) Then ReDim Preserve st(1 To i * 2)
        Input #ff, st(i)
    Wend
    Close #ff
    ReDim Preserve st(1 To i)
    ff = FreeFile
    Open "\TIME\hours.txt" For Output As #ff
    For i = 1 To UBound(st)
        If i <> 2 Then ' Убераем вторую строку
            Print #ff, st(i)
        End If
    Next
    Close #ff
End Sub
 
Private Sub Form_Load()
    ChDir Environ("systemdrive")
    If Len(Dir("\TIME", vbDirectory)) = 0 Then MkDir "\TIME"
    ff = FreeFile
    'Строчки ниже можно закоментировать если не нужно заполнять файл hours.txt
    Open "\TIME\hours.txt" For Output As #ff
    For Each v In Split("Удалить определенную строку в txt файле visual basic 6")
        Print #ff, v
    Next
    Close #ff
End Sub
Добавлено через 2 минуты
Должно получиться следущее:

Файл на входе
Visual Basic
1
2
3
4
5
6
7
8
9
Удалить
определенную 
строку
в
txt
файле
visual
basic
6
на выходе

Visual Basic
1
2
3
4
5
6
7
8
Удалить
строку
в
txt
файле
visual
basic
6
1
141 / 119 / 29
Регистрация: 12.02.2017
Сообщений: 308
02.03.2017, 17:20 8
Tawan12, вот

Добавлено через 1 минуту
Visual Basic
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
Sub RemoveLine(sFileName As String, iLineNumber As Long)
    Dim iSource As Long
    Dim iTarget As Long
    Dim iLineCount As Long
    Dim sLine As String
    Dim sTmpFile As String
    If Dir(sFileName) = "" Then
        MsgBox "Файл " & sFileName & " не обнаружен."
        Exit Sub
    End If
    iSource = FreeFile
    Open sFileName For Input As #iSource
        sTmpFile = Left(sFileName, InStrRev(sFileName, ".")) & "t~"
        iTarget = FreeFile
        Open sTmpFile For Output As #iTarget
            Do Until EOF(iSource)
                Line Input #iSource, sLine
                iLineCount = iLineCount + 1
                If iLineCount <> iLineNumber Then Print #iTarget, sLine
            Loop
        Close #iTarget
    Close #iSource
    Kill sFileName
    Name sTmpFile As sFileName
End Sub
 
Sub CallingForTest() 'пример работы программы
    RemoveLine "c:\TIME\hours.txt", 10  'число 10 это номер удаляемой строки
End Sub
Добавлено через 3 минуты
В процедуре CallingForTest() нужно указать полное имя файла и номер строки, которую нужно удалить, и запустить ее.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
37416 / 20788 / 4278
Регистрация: 12.02.2012
Сообщений: 34,199
Записей в блоге: 14
02.03.2017, 17:43 9
С помощью временного файла - неинтересно... С помощью полной загрузки в память - неинтересно... Как сделать без дополнительных файлов и без полной загрузки в память? А ведь можно:

- читаем на двоичном доступе блоки файла один за другим в буфер
- в процессе чтения ловим появление кодов chr$(13) - т.е. считаем строки
- когда подведена нужная строка, определяем ее длину и отнимаем от исходной длины файла длину удаляемой строки
- читаем данные после удаленной строки и записываем в этот же файл, начиная с места удаления...

А теперь самое интересное!

- файл закрываем и снова открываем с помощью winAPI-функции CreateFile; сохраняем хэндл открытого файла
- с помощью winAPI-функции SetFilePointer устанавливаем файловый указатель на позицию в файле, равную новой длине
- с помощью winAPI-функции SetEndOfFile делаем это место концом файла (усекаем файл)
- с помощью winAPI-функции CloseHandle закрываем файл

Вот теперь - все. Строка удалена из файла без лишней памяти и файлов. Код ниже:

Visual Basic
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
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const FILE_BEGIN = 0
 
'::: Создание тестового файла
 
Sub A1()
    HomeDir$ = ThisWorkbook.Path
    fo% = FreeFile
    Open HomeDir$ + "\f1.txt" For Output As #fo%
    For i% = 1 To 200
        Print #fo%, "Строка - " & CStr(i%)
    Next i%
    Print #fo%, "***"
    Close #fo%
End Sub
 
'::: Удаление строки с номером N
 
Sub A2()
Dim Flg As Boolean
    HomeDir$ = ThisWorkbook.Path
    Fname$ = HomeDir$ + "\f1.txt"
    fb% = FreeFile
    Open Fname$ For Binary Access Read Write As #fb%
    LF& = LOF(fb%) ' исходная длина
    N% = 99 ' номер удаляемой строки
    Buf$ = Space$(200)
    iii% = 1
    Flg = False
    Do
      Buf$ = Space$(200)
      PT& = Loc(fb%) + 1
      Get #fb%, , Buf$
      Do
         If iii% = N% Then
            Seek #fb%, PT&
            Buf$ = Space$(200)
            Get #fb%, , Buf$
            k% = InStr(Buf$, Chr$(13))
            SZ& = k% + 1 '::: длина удаляемой строки
            PF& = PT& + k% + 1
            Do While (PF& < LF&)
               Seek #fb%, PF&
               Buf$ = Space$(200)
               Get #fb%, , Buf$
               Seek #fb%, PT&
               Put #fb%, , Buf$
               PT& = PT& + 200
               PF& = PF& + 200
            Loop
            Flg = True
            Exit Do
         End If
         k% = InStr(Buf$, Chr$(13))
         If k% = 0 Then Exit Do
         iii% = iii% + 1
         PT& = PT& + k% + 1
         Buf$ = Mid$(Buf$, k% + 2)
      Loop
    
      If Flg Then Exit Do
    
    Loop
    
    Close #fb%
 
    hf& = CreateFile(Fname$, GENERIC_WRITE, 0&, 0&, OPEN_EXISTING, 0&, 0&)
    newSize& = LF& - SZ&
    PP& = SetFilePointer(hf&, newSize&, 0&, FILE_BEGIN)
    Rc& = SetEndOfFile(hf&)
    Rc& = CloseHandle(hf&)
 
End Sub
3
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 36
02.03.2017, 19:45  [ТС] 10
fever brain, спасибо большое

только у меня файл на входе
1
2
3
4
5
...
и т. д., цифры и дальше будут прибавляться
Подскажите, пожалуйста, как это прописать здесь:
Цитата Сообщение от fever brain Посмотреть сообщение
For Each v In Split("Удалить определенную строку в txt файле visual basic 6")
0
oh my god
1455 / 794 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
02.03.2017, 22:58 11
Visual Basic
1
2
3
4
    Dim i&
    For i = 1 To 10
        Print #ff, i
    Next
0
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 36
02.03.2017, 23:46  [ТС] 12
fever brain, спасибо, здесь строки от 1 до 10
Цитата Сообщение от fever brain Посмотреть сообщение
For i = 1 To 10
поэтому я спрашивала ранее, как прописать, количество строк, не указывая четко до какой, потому что они будут прибавляться постоянно ....
Цитата Сообщение от fever brain Посмотреть сообщение
For i = 1 To UBound(st)
вот как вы здесь писали
у меня выбивает ошибку, не знаю как ввести переменную St
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Form_Load()
    ChDir Environ("systemdrive")
    If Len(Dir("\TIME", vbDirectory)) = 0 Then MkDir "\TIME"
    ff = FreeFile
     Dim i&
  Open "C:\TIME\hours.txt" For Output As #ff
    For i = 1 To UBound(St)
        Print #ff, i
    Next
    Close #ff
End Sub
0
oh my god
1455 / 794 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
03.03.2017, 00:25 13
Цитата Сообщение от Tawan12 Посмотреть сообщение
UBound(st)
UBound это размер массива
Print добавит строку в конец файла
EOF определяет дошла ли считываемая строка до конца файла
есть еще
LOF - размер, Seek - позиция и тд, сейчас мне некогда, у меня утро
опять вы пишете C: в имени файла, поймите не у всех есть этот диск, у меня Z:\
и чо я буду переделывать код чтобы проверить как все работает, я уже писал как это грамотно сделать
скомпелированную программу уже не переделаешь..

у вас в программе уже есть это
ChDir Environ("systemdrive") - и то можно не писать программа и так будет искать корень диска если C: не указывать
тоесть корневая папка системного диска, дальше если использовать имена путей
то можно писать \TIME ... или \Windows или \Program Files

Добавлено через 11 минут
Если ктото чтото гдето написал, это не значит что надо тупо списывать и использовать
даже Catstail не рассмотрел элементарные ошибки кода

HomeDir$ = ThisWorkbook.Path - Папка открытой книги EXCEL - здесь этот код работать не будет
Open HomeDir$ + "\f1.txt" For Output As #fo% - HomeDir$ & "\f1.txt"
0
141 / 119 / 29
Регистрация: 12.02.2017
Сообщений: 308
03.03.2017, 10:51 14
Tawan12, сложно понять что Вы хотите, если нужно просто пронумеровать строки в текстовом файле, то используйте NumberLine.
Если нужно удалить строку в файле с сохранением порядка нумерации тогда RemoveLine2.

Добавлено через 1 минуту
Visual Basic
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
Sub RemoveLine2(sFileName As String, iLineNumber As Long)
    On Error GoTo M
    Dim iSource As Long
    Dim iTarget As Long
    Dim iLineCount As Long
    Dim i As Long
    Dim sLine As String
    Dim sTmpFile As String
    If Dir(sFileName) = "" Then
        MsgBox "Файл " & sFileName & " не существует."
        Exit Sub
    End If
    iSource = FreeFile
    Open sFileName For Input As #iSource
        sTmpFile = Left(sFileName, InStrRev(sFileName, ".")) & "t~"
        iTarget = FreeFile
        Open sTmpFile For Output As #iTarget
            Do Until EOF(iSource)
                Input #iSource, i, sLine
                iLineCount = iLineCount + 1
                If i = iLineNumber Then
                    iLineCount = iLineCount - 1
                Else
                    sLine = CStr(iLineCount) & Chr(32) & sLine
                    Print #iTarget, sLine
                End If
            Loop
        Close #iTarget
    Close #iSource
    Kill sFileName
    Name sTmpFile As sFileName
    Exit Sub
M:
    MsgBox "Sorry, on open of the " & sFileName & " unforeseen error occured."
End Sub
 
 
 
Sub CallingForTest() 'пример работы программы
    RemoveLine2 "c:\TIME\hours.txt", 10  'число 10 это номер удаляемой строки
End Sub
 
Sub NumberLine(sFileName As String)
    Dim iSource As Long
    Dim iTarget As Long
    Dim iLineCount As Long
    Dim sLine As String
    Dim sTmpFile As String
    If Dir(sFileName) = "" Then
        MsgBox "Файл " & sFileName & " не существует."
        Exit Sub
    End If
    iSource = FreeFile
    Open sFileName For Input As #iSource
        sTmpFile = Left(sFileName, InStrRev(sFileName, ".")) & "t~"
        iTarget = FreeFile
        Open sTmpFile For Output As #iTarget
            Do Until EOF(iSource)
                Line Input #iSource, sLine
                iLineCount = iLineCount + 1
                sLine = CStr(iLineCount) & Chr(32) & sLine
                Print #iTarget, sLine
            Loop
        Close #iTarget
    Close #iSource
    Kill sFileName
    Name sTmpFile As sFileName
End Sub
1
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 36
03.03.2017, 11:57  [ТС] 15
Homarty, этот код выполняет мою задачу:
Visual Basic
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
Private Sub Command1_Click()
Dim St(10) As String
Open "C:\TIME\hours.txt" For Input As #1
    Dim S As String
    While Not EOF(1)
        N = N + 1
        Input #1, S
        St(N) = S
    Wend
Close #1
 
Open "C:\TIME\hours.txt" For Output As #1
    For i = 1 To 10
        If i <> Val(Label1) Then
            Print #1, St(i)
        End If
    
    Next
Close #1
End Sub
 
Private Sub Form_Load()
 
Open "C:\TIME\hours.txt" For Output As #1
For i = 1 To 10
    Print #1, "" & i
Next
Close #1
End Sub
но в моем txt файле будут постоянно добавляться новые строки, поэтому я не знаю, как заменить :For i = 1 To 10 - так у меня просто прописывает 10 строк и неважно сколько до этого у меня их было
0
207 / 23 / 6
Регистрация: 12.06.2012
Сообщений: 235
03.03.2017, 12:15 16
Tawan12, давай так, как только ты вставляешь код бейсика в свои посты, будь добра, обрамляй его в тег VB.
Разбираться в каракулях, это просто неуважение к остальным участникам. ОК?
Выделила код и нажала кнопочку VB.
Удалить определенную строку в txt файле
1
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 36
03.03.2017, 12:34  [ТС] 17
sergeos, поняла, ок
0
oh my god
1455 / 794 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
03.03.2017, 12:47 18
Tawan12, вам нужно
Цитата Сообщение от Tawan12 Посмотреть сообщение
но в моем txt файле будут постоянно добавляться новые строки, поэтому я не знаю
Может быть вот что надо сделать, дописать в конец файла строку ?
Visual Basic
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
Option Explicit
 
 
Private Sub Form_Load()
    Dim fl$, ff&, i&
    ChDir Environ("systemdrive")
    If Len(Dir("\TIME", vbDirectory)) = 0 Then MkDir "\TIME"
    
    fl = "\TIME\hours.txt"
    'Строчки ниже можно закоментировать если не нужно заполнять файл hours.txt
    
    If Len(Dir(fl)) = 0 Then
        '
        'Если файла совсем нет.. создаем и пишем туда 10 строчек
        '
        ff = FreeFile
        Open fl For Output As #ff
        For i = 1 To 10
            Print #ff, CStr(i)
        Next
        Close #ff
    End If
    '
    'Теперь если надо добавить еще строку то ...
    '
    ff = FreeFile
    Open fl For Binary As #ff
    Put #ff, LOF(ff) + 1, "[Новая строчка]" & vbCrLf
    Close ff
End Sub
Добавлено через 2 минуты
Можешь удалить полностью файл hours.txt, или даже всю папку TIME
и ты увидешь что создасться и папка и файл, и допишеться еще строка к уже созданному
а при повторном вызове еще...
1
207 / 23 / 6
Регистрация: 12.06.2012
Сообщений: 235
03.03.2017, 12:49 19
Цитата Сообщение от Tawan12 Посмотреть сообщение
но в моем txt файле будут постоянно добавляться новые строки, поэтому я не знаю, как заменить :For i = 1 To 10 - так у меня просто прописывает 10 строк и неважно сколько до этого у меня их было
Объяви глобальную переменную на уровне формы.
Visual Basic
1
Private LinesCount As Long
Затем, определяй своё количество строк в файле.
Присваивай переменной.
Visual Basic
1
LinesCount = 'новое количество строк
и потом уже прогон делаешь до края переменной
Visual Basic
1
For i = 1 To LinesCount
1
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 36
04.03.2017, 14:26  [ТС] 20
Использовала этот код:

Visual Basic
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
Option Explicit
Dim ff&, v
Private Sub Command1_Click()
    Dim i&
    ff = FreeFile
    Open "C:\TIME\hours.txt" For Input As #ff
    ReDim St$(1 To 1)
    While Not EOF(ff)
        i = i + 1
        If i > UBound(St) Then ReDim Preserve St(1 To i * 2)
        Input #ff, St(i)
    Wend
    Close #ff
    ReDim Preserve St(1 To i)
    ff = FreeFile
    Open "C:\TIME\hours.txt" For Output As #ff
    For i = 1 To UBound(St)
        If i <> Val(Label1) Then
            Print #ff, St(i)
        End If
    Next
    Close #ff
End Sub
Private Sub Form_Load()
Dim ff&
Dim i&
ff = FreeFile
Open "C:\TIME\hours.txt" For Output As #ff
ReDim St$(1 To 1)
    While Not EOF(ff)
        i = i + 1
        If i > UBound(St) Then ReDim Preserve St(1 To i * 2)
For i = 1 To UBound(St)
    Print #1, St(i) 
Next
  Wend
Close #ff
End Sub
первый раз сработало(удалило строку, которую я вписала в Label1 из файла txt), потом выбивает ошибку: Ошибка Run-time error '9'
Подскажите, пожалуйста, что исправить
0
04.03.2017, 14:26
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
04.03.2017, 14:26
Помогаю со студенческими работами здесь

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

write to txt. В определенную строку!
Здравствуйте! Мне необходимо сделать запись в txt файл в определённую строку (в конец) Вот...

Удалить в текстовом файле 1.txt все строки, которые встречаются в текстовом файле 2.txt
например имеется текстовый файл 1.txt c таким содержанием 111 222 333 444 555 и имеется...

Как считать определенную строку из txt файла?
Здравствуйте, у меня есть в папке с программой .txt файл, как мне считать в нем определенную...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru