powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODB.Stream: метода Open не работает с аргументами
16 сообщений из 16, страница 1 из 1
ADODB.Stream: метода Open не работает с аргументами
    #39898090
Андрей Усачёв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу открыть текстовый файл со специфической кодировкой. Поэтому не подходит Scripring.FileSystemObject, а использую ADODB.Stream. Не хочу затягивать файл в память целиком, поэтому не годится комбинация из Open без аргументов и последующим LoadFromFile.

Допустим, делаю это в VBA:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim S As ADODB.Stream
Set S = New ADODB.Stream
S.Mode = adModeRead
S.Type = adTypeText
S.Charset = "UTF-8"
'S.Open "C:\Temp\shit.txt"
'S.Open "URL=file://C:\Temp\shit.txt"
'S.Open "URL=file:///C:\Temp\shit.txt"



Ни один из закомментированных вариантов не работает. Как использовать этот чёртов метод с аргументом, но не типа Record? В документации сказано:

ДокументацияStream.Open Source, Mode , OpenOptions, UserName, Password
Parameters

Source
Optional. A Variant value that specifies the source of data for the Stream. Source may contain an absolute URL string that points to an existing node in a well-known tree structure, such as an e-mail or file system.
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898103
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
'S.Open "URL=file:///C:/Temp/shit.txt"

может так?
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898108
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898138
Андрей Усачёв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Вы всегда даёте ответ, не поняв вопрос?
Я специально минимизировал количество кода и моих комментариев.
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898147
Андрей Усачёв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Большое спасибо.
Жаль, что в описании метода Open использовано туманное выражение "well-known tree structure, such as an e-mail or file system".
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898154
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Усачёв
Вы всегда даёте ответ, не поняв вопрос?
Я специально минимизировал количество кода и моих комментариев.
Что не так в моем ответе. Я предложит попробовать тот вариант, которого у вас не было.
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898157
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim S As ADODB.Stream
Set S = New ADODB.Stream
S.Open
S.Type = adTypeText
S.CharSet = "UTF-8"
S.LoadFromFile "c:/tmp/x1.txt"
Debug.Print S.ReadText
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898164
Андрей Усачёв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Извините, не заметил, что вы заменили символы "\" на "/".
Но это я тоже пробовал. Все известные мне программы не различают эти символы в URL.
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898166
Андрей Усачёв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

А вы точно даже 1-й абзац моего исходного сообщения не прочитали.
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898203
Dino_zavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Усачёв,
А библиотеку подключили???
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898260
Андрей Усачёв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dino_zavr,

Компьютер включил, любую программу MS Office запустил, Alt+F11 нажал, библиотеку подключил, модуль создал, в модуле процедуру/функцию создал, текст программы ввёл (вот об этом я написал), F5 нажал — ну или кнопку запуска нажал. Я стараюсь не писать об очевидном, чтобы потенциальным помощникам было легче читать.
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898304
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Усачёв
А вы точно даже 1-й абзац моего исходного сообщения не прочитали.
Прочитал. И не понимаю, откуда Вы взяли, что LoadFromFile "затягивает файл в память целиком" - это же бред чистой воды... откройте реально большой файл, не влезающий в оперативку - ведь откроется же, не свалится с воплями, что памяти нехватает.
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898487
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

откроет целиком и свалится в своп.

PS
мне в итоге пришлось отказаться от стрима и вернуться к FileSystemObject с посимвольным чтением.
и не потому, что стрим читает файл целиком, а потому что в некий момент стрим был объявлен опасным,
и вбскрипт, запускаемый из-под сервиса, получал отказ в создании объекта.
ридфайл туда не приделывался, а рулить правами на стрим при установке сервиса было признано неприемлемым...
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898493
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Akina,

откроет целиком и свалится в своп.

PS
мне в итоге пришлось отказаться от стрима и вернуться к FileSystemObject с посимвольным чтением.
и не потому, что стрим читает файл целиком, а потому что в некий момент стрим был объявлен опасным,
и вбскрипт, запускаемый из-под сервиса, получал отказ в создании объекта.
ридфайл туда не приделывался, а рулить правами на стрим при установке сервиса было признано неприемлемым...


кстати, подозреваю, что при использовании интернет паблишин провайдер будет происходить то же самое
- достаточно неожиданно было бы, если бы урл читался частями
Подозреваю, что поток всегда получается целиком.
После чего ты читаешь его любимым методом.
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39898510
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут Read large file line-by-line with ADO Stream? через рекордсет предлагают ...
...
Рейтинг: 0 / 0
ADODB.Stream: метода Open не работает с аргументами
    #39911905
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полезные ссылочки на тему:
http://msdn.microsoft.com/en-us/library/ms709353.aspx
http://msdn.microsoft.com/en-us/library/ms974559.aspx

Ну и пример:

--------------------------------

Код: vbnet
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
Public Sub Main()
    Const sPathIn As String = "C:\Temp\"
    Const sPathOut As String = "C:\Temp\"
    Const sFileIn As String = "File.txt"
    Const sFileOut As String = "NewFile.txt"

    Dim cn As New ADODB.Connection, r As New ADODB.Recordset, _
        s As String, ss As String, sSchemaIni As String, i As Integer

    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & sPathIn & ";" & _
          "Extended Properties=Text"

    ' Создадим файл откуда берем данные для теста
    For i = 0 To 100
        s = Mid$(Format$(Rnd, ".0000000"), 2)
        ss = ss & Mid$(s, 1, 1) & "," & Mid$(s, 2, 1) & "," & Mid$(s, 3, 1) & "." & CInt(Mid$(s, 4, 3)) & "," & Mid$(s, 7, 1) & vbCrLf
    Next i
    s = sPathOut & sFileIn
    If FileExists(s) Then Kill s
    SaveFile s, ss
    
    ' Удалим выходной файл
    s = sPathOut & sFileOut
    If FileExists(s) Then Kill s
    
    ' Создадим schema.ini
    sSchemaIni = sPathOut & "schema.ini"
    If FileExists(sSchemaIni) Then Kill sSchemaIni
    ss = "[File.txt]" & vbCrLf _
        & "ColNameHeader=False" & vbCrLf _
        & "CharacterSet=1251" & vbCrLf _
        & "Format=Delimited(,)" & vbCrLf _
        & "DecimalSymbol=." & vbCrLf _
        & "Col1=F1 Integer" & vbCrLf _
        & "Col2=F2 Integer" & vbCrLf _
        & "Col3=F3 Float" & vbCrLf _
        & "Col4=F4 Integer" & vbCrLf _
        & vbCrLf _
        & "[NewFile.txt]" & vbCrLf _
        & "ColNameHeader=False" & vbCrLf _
        & "CharacterSet=1251" & vbCrLf _
        & "Format=Delimited(,)" & vbCrLf _
        & "DecimalSymbol=." & vbCrLf _
        & "NumberDigits=4" & vbCrLf _
        & "Col1=F1 Integer" & vbCrLf _
        & "Col2=F2 Integer" & vbCrLf _
        & "Col3=F3 Float" & vbCrLf _
        & "Col4=F4 Integer" & vbCrLf
        
    SaveFile sSchemaIni, ss
    
    ' Импортируем данные
    On Error GoTo Err_
    r.Open "SELECT * INTO [" & sFileOut _
                    & "] IN '" & sPathOut & "' [Text;] " _
            & "FROM [" & sFileIn _
            & "] ORDER BY 1,2,3,4", cn, _
                    adOpenStatic, adLockReadOnly, adCmdText
    If FileExists(sSchemaIni) Then Kill sSchemaIni
    Exit Sub

Err_:
    With cn.Errors(0)
        If .NativeError = -329323426 And .Number = -2147467259 Then Resume Next
    End With
    MsgBox Err.Description, vbCritical
End Sub

Private Function FileExists(sFile As String) As Boolean
    On Error Resume Next
    FileExists = ((GetAttr(sFile) And vbDirectory) = 0)
    If Err.Number Then Err.Clear
End Function

Private Sub SaveFile(sFile As String, sText As String)
    Dim iHFile As Integer
    
    iHFile = FreeFile
    Open sFile For Binary As #iHFile
    Put iHFile, , sText
    Close #iHFile
End Sub
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODB.Stream: метода Open не работает с аргументами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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