Изменение файла с текстом

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

Изменение файла с текстом

Сообщение Саша_ОР » 01.06.2006 (Чт) 22:17

:lol: Всем Добрый день! Заранее извините, если эта тема уже была, но я не смог все-равно найти ответ. Так вот в чем собственно говоря вопрос:
Имеется файл с текстом, нужно:
:arrow: 1) Заменить соответствующую строчку в файле.
:arrow: 2) Удалить соответствующую строчку в файле, при этом сдвинув текст на месте разрыва текста.
:arrow: 3) Считать соответствующую строчку из файла, не перебирая все низлежащие строки.
:arrow: 4) Добавить в соответствующую позицию строчку между другими строками в файле.
:!: Эти 4 вопроса для меня имеют большое значение! Буду ОЧень благодарен всем за помощь!!! :D :D :D

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.06.2006 (Чт) 22:27

1)
Код: Выделить всё

Public Sub ReplaceLine(ByVal sFileName As String, ByVal lLineNum As Long, ByVal sReplaceWith As String)
Dim hFile As Long
Dim sBuffer As String
Dim sLines() As String

  hFile = FreeFile()
  Open sFileName For Binary As #hFile
  sBuffer = Space(LOF(hFile))
  Get #hFile, 1, sBuffer
  sLines = Split(sBuffer, vbNewLine)
  sLines(lLineNum-1) = sReplaceWith
  sBuffer = Join(sLines, vbNewLine)
  Put #hFile, 1, sBuffer
  Close #hFile
End Sub


2)
Код: Выделить всё

Public Sub DeleteLine(ByVal sFileName As String, ByVal lLineNum As Long)
Dim hFile As Long
Dim sBuffer As String
Dim sLines() As String

  hFile = FreeFile()
  Open sFileName For Binary As #hFile
  sBuffer = Space(LOF(hFile))
  Get #hFile, 1, sBuffer
  sLines = Split(sBuffer, vbNewLine)
  For i = lLineNum To UBound(sLines) - 1
    sLines(i) = sLines(i + 1)
  Next i
  ReDim Preserve sLines(UBound(sLines) - 1)
  sBuffer = Join(sLines, vbNewLine)
  Put #hFile, 1, sBuffer
  Close #hFile
End Sub


3)
Код: Выделить всё

Public Function ReadLine(ByVal sFileName As String, ByVal lLineNum As Long) As String
Dim hFile As Long
Dim sBuffer As String
Dim sLines() As String

  hFile = FreeFile()
  Open sFileName For Binary As #hFile
  sBuffer = Space(LOF(hFile))
  Get #hFile, 1, sBuffer
  sLines = Split(sBuffer, vbNewLine)
  Close #hFile
  ReadLine = sLines(lLineNum - 1)
End Sub


4)
Код: Выделить всё

Public Sub AddLine(ByVal sFileName As String, ByVal lLineNum As Long, ByVal sTextToAdd As String)
Dim hFile As Long
Dim sBuffer As String
Dim sLines() As String

  hFile = FreeFile()
  Open sFileName For Binary As #hFile
  sBuffer = Space(LOF(hFile))
  Get #hFile, 1, sBuffer
  sLines = Split(sBuffer, vbNewLine)
  ReDim Preserve sLines(UBound(sLines) + 1)
  For i = UBound(sLines)  To lLineNum + 1
    sLines(i) = sLines(i - 1)
  Next i
  sLines(lLineNum) = sTextToAdd

  sBuffer = Join(sLines, vbNewLine)
  Put #hFile, 1, sBuffer
  Close #hFile
End Sub


_________________________
Использование:
ReplaceLine имя_файла, номер_строки, на_что_заменить
Заменяет в файле имя_файла строчку под номером номер_строки на текст, содержащийся в переменной на_что_заменить

DeleteLine имя_файла, номер_строки
Удалёет из файла имя_файла строку под номером номер_строки

LineText = ReadLine(имя_файла, номер_строки)
Переменная LineText будет содержать строчку под номером номер_строки из файла имя_файла

AddLine имя_файла, номер_строки, что_добавить
Добавляет в файл имя_файла вместо строчки с номером номер_строки текст из переменной что_добавить
Последний раз редактировалось Хакер 01.06.2006 (Чт) 22:47, всего редактировалось 3 раз(а).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 01.06.2006 (Чт) 22:31

TextStream?



-------------------------------------
(удалите, пожалуйста, это сообщение)
Последний раз редактировалось xqz_me 01.06.2006 (Чт) 22:41, всего редактировалось 1 раз.

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 01.06.2006 (Чт) 22:34

3) Метод ReadLine объекта TextStream

Саша_ОР
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 08.01.2006 (Вс) 19:48

Сообщение Саша_ОР » 01.06.2006 (Чт) 22:40

Спасибо за код, но вот для файлов, открытых методом INPUT, вышеприведенный код подойдет?

Файл: File.txt
Строка№1
строка№2
Строка№3

К тому же нехочется затрагивать другие строки при чтении, перезаписи и т.п.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.06.2006 (Чт) 22:45

Саша_ОР, используя мои методы тебе необязательно вообще открывать файл.

К тому же нехочется затрагивать другие строки при чтении, перезаписи и т.п

На счёт других строчек - не волнуйся ничего с ними не будет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 02.06.2006 (Пт) 7:00

Хакер писал(а):Саша_ОР, используя мои методы тебе необязательно вообще открывать файл.


Я идиот! Убейте меня, кто-нибудь! удивил... :shock: а Open это уже не открытие файла? :shock:
Весь мир матрица, а мы в нем потоки байтов!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.06.2006 (Пт) 12:46

!Viper!, я про то что не нужно делать так


Код: Выделить всё
Open xxx For Input As #1
foo = МояФункция(ываываыва)
Close #1
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 108

    TopList