Имя: Пароль:
1C
1C 7.7
v7: Можно как-то спозиционироваться на нужной начальной строке поумнее чем в сабже?
0 palpetrovich
 
02.07.15
15:26
кодик:
    fso = СоздатьОбъект("Scripting.FileSystemObject");
    TextStream = fso.OpenTextFile(ИмяФайла, 1, 0, 0);
    Пока TextStream.AtEndOfStream=0 Цикл
        Если НачСтрока > TextStream.Line Тогда
            TextStream.SkipLine();
        КонецЕсли;
        стр = TextStream.ReadLine();  // ну наконец-то :)

зы: не то что-б сильно критично, но мало-ли, может я тупо не  нашел какого-то метода типа TextStream.GoToLine(НачСтрока)
1 palpetrovich
 
02.07.15
15:27
* прошу прощения, "саюже" читать как "саБже" :)
2 aka AMIGO
 
02.07.15
15:28
(1) исправленному верить :)
3 aka AMIGO
 
02.07.15
15:30
(0) файл текстовый?
4 Господин ПЖ
 
02.07.15
15:31
читай через ado
5 aka AMIGO
 
02.07.15
15:32
(4) а читать, как текст - сложнее?
6 Господин ПЖ
 
02.07.15
15:34
(5) может товарищ в клюшках сидит.

тамошний "читатель текстов"  кривой как сабля турецкая
7 aka AMIGO
 
02.07.15
15:36
(6) так секция заявлена однозначно, 7.7
а у меня нормально текст читается, сбоев не было ни одного..
8 palpetrovich
 
02.07.15
15:36
(3) ну да, (5) медленнее
(6) в них
9 Попытка1С
 
02.07.15
15:36
(6) Ну как бы СоздатьОбъект уже говорит о клюшках.
10 palpetrovich
 
02.07.15
15:38
ну, как я понял, искомого метода таки нет?
11 cdiamond
 
02.07.15
15:40
(10) ну сам рассуди - позиционироваться в потоке в нужную запись легко когда длина записи фиксированная, а тут строки переменной длины
12 18_plus
 
02.07.15
15:40
(10) не, с текстом последовательный доступ.
прямой возможен при работе как с двоичным файлом, но нужно знать смещение :)
13 aka AMIGO
 
02.07.15
15:40
(10) ;-/ я не знаю, а метод в сабже - быстрый..
14 Господин ПЖ
 
02.07.15
15:40
(10) открой msdn и посмотри
15 palpetrovich
 
02.07.15
15:46
поянтно, спасибо
зы: файл на сей мрмент порядка 100 мб, строк порядка 700000, формируется около 30 секунд ...если учесть что это для кероводства, типа смотреть кто что когда :)
16 Злопчинский
 
02.07.15
18:12
а тупо всякими обработчиками втянуть через драйвера в ДБФ (если строки не сильно длинные). а в ДБФ - полято уже фиксированной длины...
17 Fedor-1971
 
02.07.15
18:35
(10) Попробуй SkipLine(5) - пропуск 5-ти строк, вроде прокатывало. Как мене помнится в FSO строка считается по \n
18 vcv
 
03.07.15
07:13
Если файл создаётся один раз, а нужен многократно, или только дописывается, как, например, журнал регистрации, можно вести индекс. Еще один файл, в котором каждые N байт будут смещением до соответствующей строки.
19 palpetrovich
 
03.07.15
09:04
(17) TextStream.SkipLine(5);  Неверное число параметров
это Skip(5) можно, причем 5 - число символов  
(18) речь именно за журнал регистрации, индекс конечно ввел.  такой вот:  Дата:НомерСтрокиВЖурнале, НачСтрока именно по нему ищется
20 Fedor-1971
 
03.07.15
09:52
(19) уточнил в хелпе предагается вот такой код:
var i;
for (i = 0; i < 5; i++) stdin.SkipLine();
так что, вряд ли есть что-то более продвинутое.
Попробуй ReadAll() - получишь строку и с ней работай.
С файлами больше 300мб выигрыш в скорости практически незаметен.
21 Mikeware
 
03.07.15
09:58
(19) так введи не НачСтрока, а номер символа.
На символ позиционируйся, а от него уже читай строками...
Хотя лучше как сказали выше - перегонять текстовый файл в формат любой БД (дбф, файрбепрд, скл), и уже там работать
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.