Имя: Пароль:
1C
1С v8
чтение большого файла с помощью "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) как это - напрямую? данный код использую для переброски справочника между базами с идентичными конфигурациями.