Заменете скрипта, който не работи с unicode txt файлове

Опитвам се да използвам следния код, за да заменя всички раздели със запетаи в текстов файл:

Const ForReading = 1
Const ForWriting = 2
Const TristateTrue = -1

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Users\Tom\Desktop\CSV.txt", ForReading, TristateTrue)

strText = objFile.ReadAll
strTab = vbTab

strText = Replace(strText, strTab, ",")

objFile.Close

Set objFile = objFSO.OpenTextFile("C:\Users\Tom\Desktop\CSV.txt", ForWriting, TristateTrue)

objFile.Write strText

objFile.Close

Въпреки това, когато стартирам това за прикачения файл, получавам грешката:

Ред 17 Символ 1 Невалидно извикване на процедура или аргумент

Този файл е unicode txt файл, създаден от Excel.

Ако отворя файла и го запиша във формат UTF-8, кодът ми работи правилно. Въпреки това не мога да намеря начин да направя това преобразуване в код без изкривени резултати.

Може ли някой да ми помогне да накарам кода си да работи с оригиналния текстов файл с unicode ИЛИ да намеря начин за използване на изпълним код (vba/batch) за конвертиране на файла в UTF-8?


person Tom    schedule 15.08.2016    source източник


Отговори (1)


От помощ

Отваря определен файл и връща обект TextStream, който може да се използва за четене, запис или добавяне към файла.

object.OpenTextFile(filename[, iomode[, create[, format]]])

обект

Задължително. Object винаги е името на FileSystemObject.

име на файл

Задължително. Низов израз, който идентифицира файла за отваряне.

iomode

Не е задължително. Може да бъде една от трите константи: ForReading, ForWriting или ForAppending.

създайте

Не е задължително. Булева стойност, която показва дали може да бъде създаден нов файл, ако указаното име на файл не съществува. Стойността е True, ако е създаден нов файл, False, ако не е създаден. Ако е пропуснато, нов файл не се създава.

формат

Не е задължително. Една от трите стойности на Tristate, използвани за указване на формата на отворения файл. Ако е пропуснато, файлът се отваря като ASCII.

Вие посочвате Create с TristateTrue, а не Format.

Можете да пропуснете False по-долу (False е по подразбиране), но НЕ и ,. Позиционните параметри трябва да бъдат посочени по ред, липсващите със запетая. Крайните запетаи също могат да бъдат пропуснати.

objFSO.OpenTextFile("C:\Users\Tom\Desktop\CSV.txt", ForWriting, False, TristateTrue)

person Community    schedule 15.08.2016
comment
Уау, дразня се, че го пропуснах, благодаря! Бих си помислил, че TristateTrue при Create ще изведе грешка, тъй като не е булево? Няма значение, тъй като сега работи перфектно! - person Tom; 15.08.2016