Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как убрать ASCII-символ из файла? (http://forum.oszone.net/showthread.php?t=325171)

glukin 23-03-2017 23:50 2722523

Как убрать ASCII-символ из файла?
 
Вложений: 1
Есть файл вот такого вида: во вложении.
Нужно убрать из него все символы с 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 2722524

Цитата:

Цитата glukin
Есть файл вот такого вида: во вложении. »

Во вложении должен быть сам файл, упакованный в архив, а не картинка.

glukin 24-03-2017 00:11 2722525

Вложений: 1
  • 30.10.zip (876 bytes, скачиваний: 21)
Iska, Прикрепил.
Картинка для наглядности, что нужно удалять.

Iska 24-03-2017 00:11 2722526

Если Вам нужно заменить последовательность концов строк с формата 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 2722542

Iska, спасибо, работает. А подскажите еще плз, как мне убрать в конце файла символ 0x01A?

Iska 24-03-2017 08:32 2722547

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 2722558

Цитата:

Цитата Iska
glukin, а Вы уверены, что его нужно убирать? »

Да, named с ним не стартует, удаляю его руками - все ОК.

megaloman 24-03-2017 10:19 2722571

Iska,
Почему надо читать исходный файл в массив, почему нельзя его прочесть в строку и сделать replace ?
Код:

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 2722574

Цитата:

Цитата megaloman
Почему надо читать исходный файл в массив, почему нельзя его прочесть в строку и сделать replace ? »

Можно и так, разумеется. Я, правда, предпочитаю, где можно, работать с массивами по for each … in.


Время: 22:41.

Время: 22:41.
© OSzone.net 2001-