Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / open for binary для VBScript / 15 сообщений из 15, страница 1 из 1
18.11.2008, 00:09
    #35659215
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
'save to file
Open "c:\a2.xml" For Binary As # 1 
Put # 1 , , s
Close # 1 
при записи размер  1 .8M


'get from file
Open "c:\a2.xml" For Binary As # 1 
get # 1 , , s
Close # 1 
(преобразование и запись)
эти работает для VB6


нашёл функции для VBscript
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Function ReadBinaryFile(FileName)
     Const adTypeBinary =  1 
     Dim BinaryStream
     Set BinaryStream = CreateObject("ADODB.Stream")
     BinaryStream.Type = adTypeBinary
     BinaryStream.Open
     BinaryStream.LoadFromFile FileName
     ReadBinaryFile = BinaryStream.Read
     BinaryStream.Close
     Set BinaryStream = Nothing
  End Function

Function SaveBinaryData(FileName, Text)
     Const adTypeBinary =  1 
     Const adTypeText =  2 
     Const adSaveCreateOverWrite =  2 
     Dim BinaryStream As ADODB.Stream
     Set BinaryStream = CreateObject("ADODB.Stream")
     BinaryStream.Type = adTypeBinary
     BinaryStream.Open
     With CreateObject("ADODB.Stream")
        .Type = adTypeText
        .Open: .WriteText Text
        .position =  2 
        .CopyTo BinaryStream, Len(Text) *  2 
        .Close
     End With
     BinaryStream.SaveToFile FileName, adSaveCreateOverWrite
     BinaryStream.Close
     Set BinaryStream = Nothing
End Function
при записи в данном случае размер файла увеличивается в 2 раза(Unicode)
но конечные файлы совпадают
как изменить код процедур чтобы размер файла при записи не увеличивался

пытался изменить код тогда при чтении файл не верный
(это нужно для компресии текста)
...
Рейтинг: 0 / 0
18.11.2008, 09:02
    #35659445
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
посмотрите здесь support.microsoft.com
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
     With CreateObject("ADODB.Stream")
        .Type = adTypeText
        .Charset = "ascii"
        .Open: .WriteText Text
        .Position =  0 
        .CopyTo BinaryStream, Len(Text)
        .Close
     End With
и ещё здесь стоит почитать
...
Рейтинг: 0 / 0
18.11.2008, 13:06
    #35660233
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
нет не срабатывает
файл при записи действительно уменьшился как при Open for binary
но когда прочитываю преобразую и записываю
то файл не соответствуют исходному а Open for binary работает
то ли проблема при записи то ли при чтении из Stream
...
Рейтинг: 0 / 0
18.11.2008, 14:47
    #35660666
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
а если использовать FileSystemObject
Код: plaintext
1.
2.
3.
4.
5.
    Dim fso As FileSystemObject
    Dim fl As TextStream
    
    Set fl = fso.OpenTextFile("")
    ...
    fl.Write
I
Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
18.11.2008, 14:58
    #35660698
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
пробовал не то не текст
я использую алгоритм LWZ для сжатия текста и соответсвенно для декомпрессии
для VB6 работает open for Binary для получения и для и для записи

в VBscript этого нет а хотел бы
fso.OpenTextFile только для текста

через stream работает если через Unicode
но размер увеличивается в 2 раза в отличии от open for Binary

если без Unicode то при чтении и декомпрессии файл не тот

вот это мне нужно победить
...
Рейтинг: 0 / 0
18.11.2008, 15:02
    #35660708
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
авторя использую алгоритм LWZ

после этого еще BASE64 применяй и тогда проблем нет, при обратном преобразовании декодь из BASE64 сначала,а потом уже из LWZ
...
Рейтинг: 0 / 0
18.11.2008, 15:12
    #35660745
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
BASE64 может увеличить размер файла
...
Рейтинг: 0 / 0
18.11.2008, 15:20
    #35660761
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
зато вы избавитесь от проблем в ASCII-кодировке
...
Рейтинг: 0 / 0
18.11.2008, 15:30
    #35660807
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
это то же самое что с UNICODE
...
Рейтинг: 0 / 0
18.11.2008, 17:54
    #35661383
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
michael R,

Ох Михаил, а зачем создавать бинарные файлы в VBS? Совершенно не могу представить смысл этой задачи. Но если сильно хочется, из готовых решений могу предложить использовать DynaWrap
http://freenet-homepage.de/gborn/WSHBazaar/WSHDynaCall.htm
Оно тебе даст доступ ко всему Виндовому API, в том числе и к CreateFile, WriteFile, etc.

Но я на 90% уверен что тебе на самом деле совершенно не нужно делать бинарный файл напрямую из VBS.
...
Рейтинг: 0 / 0
18.11.2008, 18:10
    #35661419
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
да мне всё равно бинарный файл или нет
факт что нужно сжать файл записать что бы много места не занимал и переслать на хост
на хосте сделать всё наоборот
если есть решение как преобразованный сжатый файл сохранить кроме как через open for binary и при
возможность открыть в VBscript и преобразовать обратно
то с радостью приму
...
Рейтинг: 0 / 0
18.11.2008, 18:53
    #35661534
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
michael Rнужно сжать файл записать что бы много места не занимал и переслать на хост
на хосте сделать всё наоборот
Например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub CreateComressed
   Dim sh, fso, MyFile
   Set sh = WScript.CreateObject ("WSCript.Shell")
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set MyFile = fso.CreateTextFile("testfile.txt", True)
   MyFile.WriteLine("This is a test.")
   MyFile.Close
   sh.Run "gzip -9 testfile.txt",  0 , true
   fso.MoveFile "testfile.txt.gz", "//shared_folder/testfile.txt.gz"
End Sub
Вместо gzip можешь взять любой другой архиватор. Но если речь идет о http-хостах, то браузеры сами умеют gz открывать. Их не нужно будет распаковывать перед выкладкой или пересылкой.
Ну а если нужна ручная распаковка, то точно так-же, запускаешь сначала распаковку через sh.Run потом работаешь с обычными файлами.


И вообще, Михаил, VBS это средство манипуляции файлами а не данными. А судя по твоим задачам, тебе давно пора уже за Perl браться. У него и с регулярными выражениями намного лучше чем в VB* и с файлами он прекрасно работает, да и вообще он намного мощнее.
...
Рейтинг: 0 / 0
18.11.2008, 22:13
    #35661840
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
создание файлов на хосте исключено нет прав(только чтение)
и установка dll тоже не выйдет
сжатый файл должен идти через FTP
там должен открываться преобразовываться и отправляться в базу

мне всё что нужно найти аналог open for binary для VBScript хотя бы для чтения
для записи годиться open for binary
через open for binary сжатие в 4 раза
через Stream(UNICODE) только в 2
через Stream(без UNICODE) файлы не соответсвуют друг другу

вот собственно говоря описание проблемы
...
Рейтинг: 0 / 0
19.11.2008, 00:32
    #35662017
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
michael Rсоздание файлов на хосте исключено нет прав(только чтение)Если запрещено создавать файлы, как ты собираешься создавать упакованные файлы? Если разрешено создавать упакованные файлы, то почему вдруг нельзя создавать промежуточные распакованные?

michael Rмне всё что нужно найти аналог open for binary для VBScriptЭто ты найдешь только тогда, когда сам напишешь свой собственный VBScript. Ну нету там команды open, нету. Вообще нету.
...
Рейтинг: 0 / 0
19.11.2008, 08:39
    #35662206
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open for binary для VBScript
упаковка на клиенте там есть VB
на хосте только распаковка (прочитать файл в переменную и расжать файл создавать не надо)
сам текст это данные для базы к которой я так же не могу обратиться на прямую только на хосте
аналог open for binary для VBScript есть через Stream но работа с ним не то (как писал раньше )
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / open for binary для VBScript / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]