|
Загрузка из текстового файла | ☑ | ||
---|---|---|---|---|
0
palpetrovich
06.11.12
✎
15:21
|
Существует что-то для 8.* быстрее чем:
Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл ? зы: Если "Да", то как? |
|||
1
Happy Bear
06.11.12
✎
15:23
|
(0) у тебя гигабайты текста?
|
|||
2
rutony
06.11.12
✎
15:24
|
(0) А вот так не быстрее?
ВсегоСтрок = Текст.КоличествоСтрок(); Для НомерСтроки = 1 По ВсегоСтрок Цикл |
|||
3
palpetrovich
06.11.12
✎
15:24
|
(1) десятки мб, вроде и не много, сек 15 грузится, но заметно
|
|||
4
palpetrovich
06.11.12
✎
15:24
|
(2) вряд-ли заметно
|
|||
5
rutony
06.11.12
✎
15:31
|
(4) Разница в том, что бы на каждом ветке цикла не считать количество строк...
А так тут оптимизировать нечего, ищи другие тонкие места... Есть варианты с чтением нескольких строк сразу, но это минимальный прирост больше возни... |
|||
6
palpetrovich
06.11.12
✎
18:08
|
инет глючит целый день... вот нарыл, еще не проверял
|
|||
7
palpetrovich
06.11.12
✎
18:09
|
Функция ПрочитатьCSV(Папка, ИмяФайла, КолПолей)
// Параметры: // "Папка" - путь к файлу без имени файла с завершающим слешем, // "ИмяФайла" - имя файла, // "КолПолей" - количество колонок (число). // Функция возвращает ТаблицуЗначений с данными файла. Текст = "[" + ИмяФайла + "] |ColNameHeader=False |Format=Delimited(;) |TextDelimiter=none |CharacterSet=ANSI |"; Для ы = 1 По КолПолей Цикл Текст = Текст + "Col" + ы + "=Field" + ы + " Text" + Символы.ПС; КонецЦикла; ТекстДок = Новый ТекстовыйДокумент; ТекстДок.УстановитьТекст(Текст); ТекстДок.Записать(Папка + "Schema.ini"); objRec = Новый COMОбъект("ADODB.Recordset"); strQuery = "SELECT * FROM [" + ИмяФайла + "]"; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Папка + ";Extended Properties=""text;"""; adOpenStatic = 3; adLockOptimistic = 3; adCmdText = 1; ТаблЗнач = Новый ТаблицаЗначений; Для ы = 1 По КолПолей Цикл ТаблЗнач.Колонки.Добавить(); КонецЦикла; objRec.Open(strQuery, strConn, adOpenStatic, adLockOptimistic, adCmdText); КолСтрок = objRec.RecordCount; Ном = 1; Пока Не objRec.EOF Цикл Если Ном % 500 = 0 Тогда Состояние(ИмяФайла + " " + Ном + " из " + КолСтрок); КонецЕсли; НовСтр = ТаблЗнач.Добавить(); Для i=0 По objRec.Fields.Count-1 Цикл НовСтр[i] = Строка(objRec.Fields(i).Value); КонецЦикла; objRec.MoveNext(); Ном = Ном + 1; КонецЦикла; objRec.Close(); Возврат ТаблЗнач; КонецФункции |
|||
8
Wobland
06.11.12
✎
18:09
|
(2) нет. вычисляется один раз. я проверял - менял внутри цикла
|
|||
9
Reset
06.11.12
✎
18:11
|
Возможно, будет быстрее через ЧтениеТекста, а не ТекстовыйДокумент
|
|||
10
Wobland
06.11.12
✎
18:11
|
Н=4;
Для й=1 По Н Цикл Н=1; Сообщить(й); КонецЦикла; ==== 1 2 3 4 |
|||
11
Wobland
06.11.12
✎
18:12
|
(7) это что сейчас было? запрос к цсв? серьёзно?
|
|||
12
Живой Ископаемый
06.11.12
✎
18:13
|
(7) и как, быстрее?
|
|||
13
Живой Ископаемый
06.11.12
✎
18:15
|
в конце концов, если нужно быстро - определи Внешний Источник Данных к CSV. Будет без ОЛЕДБ, только через ОДБС, возможно будет быстрее.
|
|||
14
palpetrovich
07.11.12
✎
12:00
|
(11) серьёзно, работает :) правда, прироста скорости в сравнении с (0) я не обнаружил :)
|
|||
15
Wobland
07.11.12
✎
12:00
|
(14) у меня разрыв шаблона. запрос к текстовому файлу. я себе это обязательно запишу, спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |