Большой Воронежский Форум
» Программирование>Простой вопрос по VBS
Broadcast 08:50 17.07.2008
Подскажите лохопеду ;-) как в процедуре типа

Сообщение от :
MsgBox "Необходимо сменить диск.",vbExclamation + vbOkOnly, "Напоминание о смене диска"

в сообщении использовать текст находящийся в внешнем файле в DOS-кодировке?

Если не сложно, то еще и с возможностью выбора определенных номеров строк их этого файла.

Заранее сенькс :-)
Yandex 11:49 17.07.2008
Ща справочника под рукой нет, потому псевдокот

Сообщение от :
objFSO = СоздатьОбъектФайловойСистемы
objF = objFSO.ОткрытьТекстовыйФаил
strLine = objF.ReadLine ' Необходимое число раз
objF.ЗакрытьТекстовыйФаил
MsgBox strLine, vbExclamation + vbOkOnly, "Напоминание о смене диска"

Если надо - вечерком после семи рабочий код кину.

Не заметил, что кодировка DOS - тогда надо либо конвернуть фаил заранее в Win, либо извратнуто делать. Наличие стандартного перекодирования в WSH что то не припомню.

P.S. Самый простой медот использовать WSH - это скачать с сайта MS .chm фаил про скриптовые технологии (там море простых примеров) + изучать репозитарий примеров на сайте MS в разделе WSH (нетрививальные примеры, в том числе и по удаленному администрированию и управлению через WMI).
Kerish 12:38 17.07.2008
Незнаю как в VBS, а в VB6 помню была API функция OemToChar, которая конвертировала текст из DOS в Windows (1251) кодировку.
Yandex 18:57 17.07.2008
Вообщем вот, набросал.
Правда с чтением ASCII (DOS) файла у WSH косяк - хотя я и указываю, что открываемый файл ASCII, WSH все равно открывает его в ANSI (Win)

Код читает третью строку из файла Data.txt и выводит ее в MsgBox

Сообщение от :
Dim objFSO, objF
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objF = objFSO.OpenTextFile("Data.txt", 1, true, 0)

objF.SkipLine
objF.SkipLine
strLine = objF.ReadLine

objF.Close

MsgBox strLine

shuri 21:07 17.07.2008
Итак, OpenTextFile открывает файл, если его нет, то создается новый файл. Из параметров, передаваемых методу, обязательным является только первый - имя файла. Остальные параметры можно не указывать. Вторым параметром устанавливается режим открытия файла. Возможные значения, которые может принять эта переменная, следующие:

1 - файл открывается только для чтения;
2 - файл открывается для записи. Причем, все содержимое файла, которое было до этого, уничтожится;
8 - файл открывается для добавления данных. Все, что вы запишите, будет добавлено в конец файла. Довольно удобно для ведения различных логов.

Третья переменная может принимать значение true или false. Она показывает, создавать ли новый файл, если его до этого не существовало. Если значение равно true, то новый файл будет создан.

Есть еще и четвертый параметр, который указывает кодировку для открытия файла. Его возможные значения:

- 2 - открывается, используя системную кодировку;
- 1 - открывается в кодировке Unicode;
0 - открывается в кодировке ASCII.

http://www.whatis.ru/reg/reg_s6.shtml

Вообще-то нормально открывается :-)
Yandex 22:15 17.07.2008
shuri, проверь на файле с русским текстом в DOS кодировке. У меня в MsgBox выводит каряблики.
Что значат параметры я в курсе - в оригинальной справке от MS все есть.
Broadcast 07:33 18.07.2008

Сообщение от Yandex:
objF.SkipLine
strLine = objF.ReadLine

А несколько строк как вывести?

strLine = objF.ReadLine
strLine = objF.ReadLine

или

strLine = objF.ReadLine +objF.ReadLine
Broadcast 07:34 18.07.2008

Сообщение от Yandex:
проверь на файле с русским текстом в DOS кодировке

Да, крокозяблы.
Yandex 08:58 18.07.2008
Broadcast, вот пример, который выводит результат 2, 4 и 5-ой строк

Сообщение от :
Dim objFSO, objF
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objF = objFSO.OpenTextFile("Data.txt", 1, true, 0)

objF.SkipLine ' Пропускаем 1-ую строку
strLine = objF.ReadLine ' Запоминаем 2-ю строку
objF.SkipLine ' Пропускаем 3-ю строку
strLine = strLine & objF.ReadLine ' Читаем 4-ю строку и добавляем к данным из второй строки
strLine = strLine & objF.ReadLine ' Читаем 5-ю строку и добавляем к полученным ранее данным

objF.Close

MsgBox strLine

Немного по коду
После ' идут комментарии
Объединение двух строк выполняется с помощью оператора &, а не +, как например в Delphi.

А не вариант подложить скрипту перекодированный фаил в нормальной кодировке?
Broadcast 16:34 18.07.2008

Сообщение от Yandex:
Broadcast, вот пример, который выводит результат 2, 4 и 5-ой строк

По строкам немного допетрил, еще разберусь как перевод строки сделать

Сообщение от Yandex:
А не вариант подложить скрипту перекодированный фаил в нормальной кодировке?

Вариант конечно, но файл генерят другие проги, некий сводный лог, буду смотреть, конечно можно и заюзать конвертор, но его тоже надо гдето взять. А каких то системных утилит в Win2000 для конвертации нет?
Yandex 23:26 18.07.2008
Broadcast, вот так добавлять строку не просто в хвост, а с переносом

Сообщение от :
strLine = strLine & Chr(10) & Chr (13) & objF.ReadLine

Конверторов полно, надо найти который может работать без GUI, через командную строку, тогда перед выполнением первого скрипта надо будет вызывать его и передать имя исходного файла Data.txt и получаемого Data2.txt.
Код вот такой

Сообщение от :
Set objShell = CreateObject("WScript.Shell")
objShell.Run Chr(34) & "C:\Program Files\Чудо конвертер\Чудо Конвентер.exe Data.txt Data2.txt" & Chr (34)

dn2k4 09:52 20.07.2008

Сообщение от Yandex:
Конверторов полно, надо найти который может работать без GUI

или влехкую вживить в тот же vbs =)

Сообщение от :
function convert(txt, srcCharset, dstCharset)

set stream = createobject("ADODB.Stream")
with stream
.Type = 2 : .Mode = 3 : .Charset = srcCharset
.Open
.WriteText txt, 0
.Position = 0
.Charset = dstCharset : convert = .ReadText
end with
end function
' -----------------------------------------------------------------
res = convert("бНОПНЯ", "KOI8-R", "windows-1251")
msgbox res

Для досявой кодировки будет, наверное, "ibm866".
Все доступные кодировки можно подсмотреть в HKEY_CLASSES_ROOT\Mime\Database\Charset
Yandex 11:34 20.07.2008
dn2k4, крут. Что еще сказать
Я тока через Word.Application знал. Но что то длинный получился скрипт, потому писать не стал.
dn2k4 11:37 20.07.2008
http://forum.script-coding.info/
Broadcast 12:14 20.07.2008

Сообщение от Yandex:
dn2k4, крут. Что еще сказать

Еще только могу добавить - спасибо, ну и Yandex тоже, всё работает заипись!
Вверх