Войти

Показать полную графическую версию : [решено] Как убрать ASCII-символ из файла?


glukin
23-03-2017, 23:50
Есть файл вот такого вида: во вложении.
Нужно убрать из него все символы с ASCII-кодом 013 (обведен красным).
Пытаюсь сделать это вот таким кодом:
Set NFile2 = FSO.OpenTextFile("D:\30.10.ptr", 1, True)
arrTemp = Split(NFile2.ReadAll, vbNewLine)
Nfile2.Close
For i = 0 To UBound(arrTemp)
arrTemp(i) = Replace(arrTemp(i), Chr(013), "")
Next
Set NFile2 = FSO.CreateTextFile("D:\30.10.ptr", True)
NFile2.Write Join(arrTemp, vbNewLine)
NFile2.Close
Set NFile2 = Nothing
Почему не убирает??
Хотя если поставить ASCII-код символа, например, 036 ($) - то все прекрасно убирает.

Iska
24-03-2017, 00:03
Есть файл вот такого вида: во вложении. »
Во вложении должен быть сам файл, упакованный в архив, а не картинка.

glukin
24-03-2017, 00:11
Iska, Прикрепил.
Картинка для наглядности, что нужно удалять.

Iska
24-03-2017, 00:11
Если Вам нужно заменить последовательность концов строк с формата Windows (CrLf) на Unix (Lf), то можете попробовать так (не проверялось):
Option Explicit

Dim strSourceFile

Dim arrContent


strSourceFile = "D:\30.10.ptr"

With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strSourceFile) Then
With .OpenTextFile(strSourceFile)
arrContent = Split(.ReadAll(), vbCrLf)
.Close
End With

With .CreateTextFile(strSourceFile, True)
.Write Join(arrContent, vbLf)
.Close
End With
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 1
End If
End With

WScript.Quit 0

glukin
24-03-2017, 07:50
Iska, спасибо, работает. А подскажите еще плз, как мне убрать в конце файла символ 0x01A?

Iska
24-03-2017, 08:32
glukin, а Вы уверены, что его нужно убирать? Это обычный «End-of-file», во времена оны требовался для завершения любого текстового файла (впрочем, и сейчас можете его опробовать его использование — ввести в консоль командной строки «copy con: SomeFile.txt», что-нибудь понабирать, периодически нажимая Enter, и завершить ввод, нажатием Ctrl-Z — тот самый «End-of-file», затем Enter). Хотя, да — нынче практически не встречается в природе.

Самое простое — тупо сделать замену. Поменяйте запись в файл на такую строку:
.Write Replace(Join(arrContent, vbLf), Chr(26), "")

glukin
24-03-2017, 09:29
glukin, а Вы уверены, что его нужно убирать? »
Да, named с ним не стартует, удаляю его руками - все ОК.

megaloman
24-03-2017, 10:19
Iska, File_In = "Z:\Box_Arc\30.10.ptr" ' Исходный файл
File_Out = "Z:\Box_Arc\30.10.mod.ptr" ' Обработанный файл (может совпадать с исходным)

DelSym = Array(13, &H1A) ' Коды символов удаляемых из текста

N1 = LBound(DelSym)
N2 = UBound(DelSym)

Set FSO = CreateObject("Scripting.FileSystemObject")

Set NFile = FSO.OpenTextFile(File_In, 1, False)
S = NFile.ReadAll
NFile.Close

For i = N1 To N2
S = Replace(S, Chr(DelSym(i)), "")
Next

Set NFile = FSO.OpenTextFile(File_Out, 2, True)
NFile.Write S
NFile.Close

Iska
24-03-2017, 10:23
Почему надо читать исходный файл в массив, почему нельзя его прочесть в строку и сделать replace ? »
Можно и так, разумеется. Я, правда, предпочитаю, где можно, работать с массивами по for each … in.




© OSzone.net 2001-2012