|
чтение большого файла с помощью "Scripting.FileSystemObject" | ☑ | ||
---|---|---|---|---|
0
Сниф
21.09.11
✎
10:43
|
взял пример из Книги знаний
Книга знаний: Пример чтения и записи текстовых файлов (Scripting.FileSystemObject) Процедура ПрочитатьФайл() ИмяФайла=КаталогИБ()+"romix_test.txt"; fso=СоздатьОбъект("Scripting.FileSystemObject"); file=fso.OpenTextFile(ИмяФайла, 1, 0, 0); //Открываем файл в режиме "только чтение" Пока file.AtEndOfStream=0 Цикл стр=file.ReadLine(); Сообщить(стр); КонецЦикла; file.Close(); КонецПроцедуры Открываю текстовый файл размером 1.3 гигабайта. По идее этот код и нужен для построчного чтения текста без загрузки в оперативку. Но практически процесс 1cv8.exe (1C 8.1.15.14) за пару секунд раздувается до размера файлы подкачки и 1С вываливается с окошком "Недостаточно оперативной памяти". Что подкрутить посоветуете? |
|||
1
andrewks
21.09.11
✎
10:44
|
файл-то поди xml? :)
|
|||
2
Сниф
21.09.11
✎
10:45
|
(1) xml содержанию, но сохраненный в формат txt
|
|||
3
ptiz
21.09.11
✎
10:45
|
А чем объект ЧтениеТекста не подходит?
|
|||
4
andrewks
21.09.11
✎
10:47
|
(2) xml - это и есть текст.
у тебя, поди, в файле две строки, в первой - заголовок, во второй - всё остальное |
|||
5
Сниф
21.09.11
✎
10:47
|
(3) может и подходит, я не пробовал, так как не знал о нем. летает?)
|
|||
6
Сниф
21.09.11
✎
10:50
|
(4) нет, не две строки. у меня там вот что (в цикле):
Запись.УстановитьСтроку(); ЗаписатьXML(Запись, Выборка.Ссылка.ПолучитьОбъект()); СтрокаXML = Запись.Закрыть(); СтрокаXML = СтрЗаменить(СтрокаXML, Символы.Таб, ""); СтрокаXML = СтрЗаменить(СтрокаXML, Символы.ПС, ""); СтрокаXML = СтрЗаменить(СтрокаXML, Символы.ВК, ""); file.WriteLine(СтрокаXML); |
|||
7
Vakhrin
21.09.11
✎
10:52
|
для таких фалов использовал когда-то побитовое чтение (fread) из Clipper-87
наверняка что-то есть и более новых средствах |
|||
8
НЕА123
21.09.11
✎
10:59
|
(0)
без Сообщить() попробовать? |
|||
9
vde69
21.09.11
✎
11:00
|
можно взять binfile.dll она бесплатная и нормально читает большие файлы,
даже для 7.7 я открывал файлы под гиг |
|||
10
andrewks
21.09.11
✎
11:07
|
(6)
СтрокаXML = СтрЗаменить(СтрокаXML, Символы.ПС, ""); СтрокаXML = СтрЗаменить(СтрокаXML, Символы.ВК, ""); ну, и что ты ждёшь после такого кода? структурного форматирования xml? |
|||
11
andrewks
21.09.11
✎
11:12
|
(9) а смысл? какая религия запрещает юзать Read заместо ReadLine?
|
|||
12
ptiz
21.09.11
✎
11:13
|
(5) Как ракета летает.
|
|||
13
vde69
21.09.11
✎
11:16
|
кстати дурацкий вопрос: а зачем???
что со строкой делать? ведь наверняка ее нужно разбирать, а хмл такая зараза, что в ней обычно делается ОДИН большой узел и в нем куча объектов и не считав весь узел его штатно - не обработаешь. |
|||
14
Сниф
21.09.11
✎
11:23
|
(13) вот зачем
СтрокаТекста = file.ReadLine(); Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(СтрокаТекста); Объект = ПрочитатьXml(Чтение); Объект.Записать(); С проблемой разобрался: оперативка росла совсем по другой причине. Вопрос исчерпан, всем спасибо. |
|||
15
andrewks
21.09.11
✎
11:25
|
(14) ничо не понял. а напрямую читать - не?
|
|||
16
H A D G E H O G s
21.09.11
✎
11:27
|
Правильный ответ в (8)!
|
|||
17
Сниф
21.09.11
✎
11:31
|
(15) как это - напрямую? данный код использую для переброски справочника между базами с идентичными конфигурациями.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |