Страницы: 1
RSS
Удалить 2 последних символа из каждой строки текстового файла
 
    Добрый день!

Подскажите, как средствами VBA удалить 2 последних символа из каждой строки текстового файла и записать измененные данные в этот же файл.
 
pandora777, Добрый день. Что вы имеете в виду под выражением "текстовый файл"? Из столбца "А" эксель символы можно удалить. например, так.
Код
Sub test()
   Dim s
   For Each s In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).Cells
       If Len(s) > 2 Then s.Value = Left(s, Len(s) - 2) 
   Next s
End Sub
 
Т.е. на выходе желаете получить одну строку?
 
Есть текстовые файлы (*.txt), которые содержат информацию разделенную ";".Длина строки до 300 символов. Последнее значение в каждой строке содержит служебную информацию и мне она мешает для дальнейшей обработки. Количество разделителей для каждой строки может быть разным.  
Изменено: pandora777 - 30.04.2019 17:34:50
 
pandora777, Похоже, без файла примера " Как есть - как надо" не обойтись.
 
Все уже сделано до нас, надо только найти :) ТЫЦ
 
Вот этот код работает. Можно ли обойтись без второго файла, например пройтись replace в исходном файле? Понятно, что  первый файл я могу удалить, а второй переименовать в исходный.
Код
Sub Del2Symb()
Dim s As String
Open "c:\In\textfile.txt" For Input As #1
Open "c:\In\textfile1.txt" For Output As #2
Do While Not EOF(1)
 Line Input #1, s
 s = Left(s, Len(s) - 2)
Print #2, s
Loop
Close #1
Close #2
End Sub
 
pandora777, если файл небольшой (до неск. МБ) и его содержимое уместится в памяти, то можно
Код
Sub Del2Symb()
Dim f As String, d() As String, i&
  f = "c:\temp\textfile.txt" 'путь к файлу
  With CreateObject("scripting.filesystemobject")
    d = Split(.opentextfile(f).readall, vbCrLf)
    On Error Resume Next
    For i = 0 To UBound(d)
      d(i) = Left(d(i), Len(d(i)) - 2)
    Next
    .opentextfile(f, 2).write Join(d, vbCrLf)
  End With
End Sub
Страницы: 1
Наверх