Как удалить строку из текстового файла?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Shurik90
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 15.06.2003 (Вс) 23:49

Как удалить строку из текстового файла?

Сообщение Shurik90 » 05.09.2004 (Вс) 7:35

Как из текстового файла удалить строку в которой сейчас нахожусь?
Код: Выделить всё

    Open "C:\mytext.txt" For Input As #1
   
        Do Until EOF(1)
            Line Input #1, sMyLine
            If IsNumeric(sMyLine) = False Then  Я идиот! Убейте меня, кто-нибудь!??
        Loop

    Close #1



Т.е. оставить строчки с номерами, а остальные стереть.
Ведь я, скорей всего, должен закрыть файл, а затем заново открыть его для записи? А как я тогда узнаю на какой строчке я был?

Знающие люди, помогите!

pitbull
Постоялец
Постоялец
 
Сообщения: 314
Зарегистрирован: 25.06.2004 (Пт) 15:37
Откуда: Кемерово

Сообщение pitbull » 05.09.2004 (Вс) 11:28

ПРоше всего, наверное создать переменную.
В нее ты будешь записывать все, что тебе нужно. А когда ты просканишь файл до конца ты его удалишь. А вместо него создашь файл и запишешь в него переменную.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 05.09.2004 (Вс) 17:21

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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.09.2004 (Пн) 12:46

Еще один способ - открываешь файл как Binary, доходишь до нужной строки и перезаписываешь поверх нее следующие строки (только надо перезаписывать блоками длиною не больше, чем перезаписываемая строка). А потом обрезаешь файл API SetEndOfFile. Минусы: неудобно. Плюсы: файл именно изменяется, а не создается заново. Т.е. сохраняются атрибуты файла (дата и время создания, атрибуты, ACL и т.п.)
Lasciate ogni speranza, voi ch'entrate.

Shurik90
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 15.06.2003 (Вс) 23:49

Сообщение Shurik90 » 08.09.2004 (Ср) 21:02

alibek
Kakoй koмандoй перезаписывать ?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.09.2004 (Ср) 22:58

Код: Выделить всё
Open ... For Binary As ...
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.09.2004 (Чт) 8:54

Это ж открыть. А перезаписывать Put.
Lasciate ogni speranza, voi ch'entrate.

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 17.09.2004 (Пт) 0:52

Можно вот так:

Код: Выделить всё
Private Sub Form_Load()
Const filename = "C:\mytext.txt"
Dim TempString As String
Dim LineArray() As String

'Считываем за один заход весь файл в переменную TempString
TempString = String(FileLen(filename), " ")
Open filename For Binary As #1
    Get #1, 1, TempString
Close

'Разбиваем строку на масив строк LineArray
LineArray = Split(TempString, vbCrLf)

Open filename For Output As #1
    For i = 0 To UBound(LineArray)
        'перебираем все строчки, нужные записываем в файл
        If IsNumeric(LineArray(i)) Then Print #1, LineArray(i)
    Next
Close
End Sub
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.09.2004 (Пт) 9:14

А если это текстовый файл объемом 2Гб?
Lasciate ogni speranza, voi ch'entrate.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 17.09.2004 (Пт) 10:37

используй объект ADODB.Stream, ему и 3гб не почем


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 27

    TopList