Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Большой файл XML. Ошибка - out of string space vba.  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
Привет всем. Пытаюсь получить данные из XML. Файл порядка 200Мб. Получаю данную ошибку: out of string space vba
Как её обойти? Что нужно исправить в моем коде?

Dim i, sPat
i = FreeFile
Open FilePath For Input As i
sPat = Input(LOF(i), i)    '   <= ТУТ ОШИБКА
Close i
29 апр 19, 17:46    [21874690]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
aleks222
Member

Откуда:
Сообщений: 709
Зависит от "вам зачем его читать"?
29 апр 19, 17:55    [21874701]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
aleks222,
Нужно удалить первые пару строк для дальнейшей работы.
Кроме того, хотел еще кое что подсчитать, но видимо сделаю это по другому.
29 апр 19, 18:05    [21874712]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 543
такая есть функция построчного чтения
+
 
Private Function readtxt(path1$) As String
On Error GoTo err1
Dim filenum, strTemp$, str$
 filenum = FreeFile
Open path1 For Input As #filenum
   Do While Not EOF(filenum)
        Line Input #filenum, strTemp
        str = str & strTemp
    Loop
Close #filenum
readtxt = str
exit_herhe:
Exit Function
err1:
readtxt = vbNullString
Resume exit_herhe
End Function

текущие задачи выполняет на больших объемах не тестил.
29 апр 19, 18:14    [21874722]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4568
alecko,

автор
Line Input #filenum, strTemp


эта строка может не сработать
--у XML очень часто одно длиннющая строка(в те же 200мб)
--и обычно UTF-8 кодировка
29 апр 19, 18:45    [21874756]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4297
Архимедофф
Пытаюсь получить данные из XML
Может работать средствами для работы с XML?
29 апр 19, 18:59    [21874767]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
Панург,
Ну я так и делаю по большому счету. А читать я хотел, для того чтобы построить прогресс бар. Для этого, хотел из файла получить количество определенных последовательных символов (kolzapiseivsego). Судя по всему от этого откажусь.


' подсчитаем количество импортируемых записей
Open FilePath For Input As #i: sPat = Input(LOF(i), #i): Close #i
sPat = Split(sPat, "class=""RTVPD""")
kolzapiseivsego = CLng(UBound(sPat))
Debug.Print "Количество class RTVPD="; kolzapiseivsego
'--------------------------------------------------------------


m = m + 1
Result = SysCmd(acSysCmdInitMeter, "Обработано:  " & Int((m / kolzapiseivsego) * 100) & "%", kolzapiseivsego)
Result = SysCmd(acSysCmdUpdateMeter, m)
29 апр 19, 21:18    [21874909]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
court
Member

Откуда:
Сообщений: 1775
Архимедофф
Панург,
Ну я так и делаю по большому счету. А читать я хотел, для того чтобы построить прогресс бар. Для этого, хотел из файла получить количество определенных последовательных символов (kolzapiseivsego). Судя по всему от этого откажусь.
Так и получай это количество из DOMDocument-а выбрав все ноды с таким атрибутом и взяв их кол-во

kolzapiseivsego = objXML.selectNodes("//*[@class=""RTVPD""]").length
30 апр 19, 10:02    [21875252]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
court,
Спасибо.
Еще подскажите, почему один и тот же файл большого объема то загружается, то нет.
Заметил, что программа как бы подвисает. Таймер показал, что приблизительно чуть более 180 секунд проходит и "Документ не загружен!". Закрыл программу, открыл и запустил. Выполнилось. Пока объяснений не вижу. :(
If Not xmlDoc.Load(FilePath) Then   
    MsgBox "Документ не загружен!"
    Exit Sub
End If
30 апр 19, 20:15    [21875952]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
court
Member

Откуда:
Сообщений: 1775
Архимедофф
court,
Спасибо.
Еще подскажите, почему один и тот же файл большого объема то загружается, то нет.
Заметил, что программа как бы подвисает. Таймер показал, что приблизительно чуть более 180 секунд проходит и "Документ не загружен!". Закрыл программу, открыл и запустил. Выполнилось. Пока объяснений не вижу. :(
If Not xmlDoc.Load(FilePath) Then   
    MsgBox "Документ не загружен!"
    Exit Sub
End If

Нуу выведи ошибку, - почитаем :)
Dim xDoc As MSXML.DOMDocument    
Dim strErrText As String    
Dim xPE As MSXML.IXMLDOMParseError    

Set xDoc = New MSXML.DOMDocument 
If xDoc.Load("C:\My Documents\cds.xml") Then    
' The document loaded successfully.    
' Now do something intersting. 
Else    
' The document failed to load.    
' Obtain the ParseError object    
  Set xPE = xDoc.parseError    
  With xPE
    strErrText = "Your XML Document failed to load" & _
        "due the following error." & vbCrLf & _
        "Error #: " & .errorCode & ": " & xPE.reason & _
        "Line #: " & .Line & vbCrLf & _
        "Line Position: " & .linepos & vbCrLf & _
        "Position In File: " & .filepos & vbCrLf & _
        "Source Text: " & .srcText & vbCrLf & _
        "Document URL: " & .url
  End With

  MsgBox strErrText, vbExclamation 
End If

Set xPE = Nothing

имхую, что файл просто "заблокирован" твоими "приседаниями" с Open FilePath For Input
и система просто не даёт к нему доступ
1 май 19, 10:18    [21876184]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
aleks222
Member

Откуда:
Сообщений: 709
Архимедофф
aleks222,
Нужно удалить первые пару строк для дальнейшей работы.
Кроме того, хотел еще кое что подсчитать, но видимо сделаю это по другому.

Так читай "кусочками".
1 май 19, 14:37    [21876347]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
court,
Операции Open FilePath For Input я отключил.

К сообщению приложен файл. Размер - 4Kb
1 май 19, 19:37    [21876523]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
aleks222,
Хорошо, можно пример кода? Как удалить в файле первые две строки?
1 май 19, 19:41    [21876525]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4568
aleks222
Так читай "кусочками".

как читать кусочками, если в файле часто 1 строка, все 200мб( а то и 50гб)
--одной строкой
--разделитель подстрок имеет код=10 и line input не работает
--и в придачу кодировка ГЕА-8
1 май 19, 20:10    [21876531]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4568
опечатка

и в придачу кодировка utf-8
1 май 19, 20:11    [21876534]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
Вот на скрине начало файла. Пока не удалишь первые две строчки - санки на поедут. Приходится удалять вручную.

К сообщению приложен файл. Размер - 8Kb
1 май 19, 23:00    [21876600]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
aleks222
Member

Откуда:
Сообщений: 709
ПЕНСИОНЕРКА
aleks222
Так читай "кусочками".

как читать кусочками, если в файле часто 1 строка, все 200мб( а то и 50гб)
--одной строкой
--разделитель подстрок имеет код=10 и line input не работает
--и в придачу кодировка ГЕА-8


Вы меня пугаете своей дремучестью.

1. Открой как Binary
2. Читай по одному байту (можно и не по одному, но квалификация ТС не дозволяет).
3. Нема проблем.

ЗЫ. Не говоря уже о том, что ADODB.Stream
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/stream-object-ado?view=sql-server-2017
умеет и utf-8 читать/писать.
2 май 19, 11:20    [21876752]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
aleks222
Member

Откуда:
Сообщений: 709
Архимедофф
aleks222,
Хорошо, можно пример кода? Как удалить в файле первые две строки?

Не, дарагуля, учись сам.
2 май 19, 11:21    [21876756]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
aleks222,
Я Вам не дарагуля. Если бы знал, не обращался. Я и так достаточно много тут подчерпнул для себя, но благодаря не пустым словам, типа ваших, а конкретным примерам. И да, я не программист, просто пытаюсь по работе себе жизнь облегчить и всё.
2 май 19, 11:32    [21876771]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
court
Member

Откуда:
Сообщений: 1775
Архимедофф
court,
Операции Open FilePath For Input я отключил.

Картинка с другого сайта.

ок

Тогда можно разбирать файл "построчно", не загружая полностью в память.
В той же библиотеке MSXML2, есть объект SAXXMLReader (или SAXXMLReader60) который читает и парсит XML построчно.

тут есть хороший пример.
Тебе нужно будет переделать метод IVBSAXContentHandler_startElement - в нём нужно будет обрабатывать нужную тебе ноду.
2 май 19, 11:38    [21876779]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
court
Member

Откуда:
Сообщений: 1775
Архимедофф
Вот на скрине начало файла. Пока не удалишь первые две строчки - санки на поедут. Приходится удалять вручную.

Картинка с другого сайта.
По поводу 2-й строки, я понимаю почему ты её удаляешь (типа, нет этого файла "под рукой").
Но не обязательно удалять !
Можно "сказать" парсёру, что бы на это DTD "не обращал внимание", да и всё :)
Для Reader-а так:
Dim saxReader As MSXML2.SAXXMLReader60
saxReader.putFeature "prohibit-dtd", False

... и для DOMDocument тоже, имхо, есть что-то подобное

А первую строку зачем удаляешь ?
Кодировка файла не UTF-8 ?
2 май 19, 11:44    [21876788]     Ответить | Цитировать Сообщить модератору
 Re: Большой файл XML. Ошибка - out of string space vba.  [new]
Архимедофф
Member

Откуда:
Сообщений: 410
court,
Спасибо большое, но для меня это уже темный лес :(
2 май 19, 19:23    [21877063]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить