![]() |
![]() |
|
v8: Как прочитать текстовый файл начиная с конца? | ☑ | ||
---|---|---|---|---|
0
ЭЦ
01.04.09
✎
20:45
|
Здравствуйте.
Прошу подсказать, как v8 прочитать текстовый файл начиная с последней строки? При последовательном доступе похоже читается только с начала. А другого способа доступа чтото не нашол. Спасибо |
|||
1
Torquader
01.04.09
✎
22:02
|
Прочитать сначала в буфер, а потом уже из буфера - как левая нога пожелает.
|
|||
2
ЭЦ
06.04.09
✎
20:45
|
В буфер читать не хочу т.к. файл сильно большой.
Хочу сразу читать с конца ! |
|||
3
Jump
06.04.09
✎
20:51
|
Дык не пихай в буфер сразу весь файл, а только последние строки.
|
|||
4
ЭЦ
06.04.09
✎
20:56
|
А как же это я туда последние строчки запихну?
|
|||
5
Jump
06.04.09
✎
20:59
|
(4)Ну к примеру в файле десять строк, читаешь с первой по восьмую в Null, а с восьмой по десятую в буфер.
|
|||
6
dimoff
06.04.09
✎
21:09
|
Кто ж данные в текстовом файле хранит, чудо?
|
|||
7
ЭЦ
06.04.09
✎
21:51
|
(5) Это здорово, только не понятно как узнать скока в файле строк.
Его для этого придется сначала весь прочитать |
|||
8
ЭЦ
06.04.09
✎
21:54
|
(5) Да и в NULL читать - как то уж больно кондово.
|
|||
9
sergeante
06.04.09
✎
22:26
|
Где начало того конца, которым оканчивается начало? (с)
А по сути сдаётся мне, что только с помощью WSH |
|||
10
sam_sam
06.04.09
✎
22:33
|
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("длодло"); КолечествоСтрок = Текст.КоличествоСтрок(); Пока КоличестувоСтрок > 0 Цикл Сообщить(Текст.ПолучитьСтроку(КоличествоСтрок)); КоличествоСтрок = КоличествоСтрок - 1; КонецЦикла; зы программисты нах. |
|||
11
ЭЦ
06.04.09
✎
22:58
|
(10) Уважаемый
То что Вы написали, это и есть последовательное чтение файла в буфер причем именно сначала. А мы тут думаем как бы прочитать файл сконца. Бо не раздувать этот буфер и впустую не тратить время на чтение. |
|||
12
Jump
06.04.09
✎
23:06
|
(11)Ну сказале же уже, либо WSH, либо последовательное чтение в буфер, чтобы не засорять память ненужные строки находящиеся в начале можно выкидывать.
Ты бы вообще объяснил для чего тебе это нужно, может проще решение есть. |
|||
13
sam_sam
06.04.09
✎
23:08
|
(11) Ну, звыняй в 1С такого нету. Чего вы там всегда такое мастерите?
|
|||
14
sam_sam
06.04.09
✎
23:08
|
(+13) очумелые ручки. :))))
|
|||
15
H A D G E H O G s
06.04.09
✎
23:57
|
(10) ВОТ!
Ап стену. Рождаются же программистами. Возьмите Нетленку. Там. Это. Реализовано. |
|||
16
H A D G E H O G s
06.04.09
✎
23:59
|
Объект
Addin.FileStream Свойства Позиция Размер Процедура/функция ОкрытьФайл() ПрочитатьФайл() |
|||
17
ЭЦ
07.04.09
✎
16:06
|
(12) Да вот собственно хотелось убедиться, что в 8.1 без использования внешних компонент можно только сначала файл прочитать.
А нужно для того, чтобы шипко длинные файлы обрабатывать т.к. известно, что нужная информация в них чаще находится ближе к концу. А файлы не мои я их в готовом виде получаю. |
|||
18
Живой Ископаемый
07.04.09
✎
16:11
|
а что приходит ? ну, что в этих файлах?
|
|||
19
Serg_1960
07.04.09
✎
16:15
|
(в качестве бреда) Создаем DBF-файлик, заливаем в него строки текстового файла. После этого можно "читать" как угодно :))
|
|||
20
H A D G E H O G s
07.04.09
✎
16:16
|
(19) Бред
|
|||
21
Живой Ископаемый
07.04.09
✎
16:18
|
(19) Берем открываем в ФАРе этот файл по Ф3 - и жмем Контрол+Енд, читаем... Более того, если этот текстовый файл в данный момент пишется, то мы сразу увидим добавляемые строки...
|
|||
22
H A D G E H O G s
07.04.09
✎
16:18
|
(21) Не факт. Смотря в каком режиме "своместности" был открыт файл.
|
|||
23
Hard man
07.04.09
✎
16:21
|
(0) Аф_фтар признайся, "Отче наш" хочешь читать?
|
|||
24
H A D G E H O G s
07.04.09
✎
16:28
|
(23) Британнику. Раздел - благодарности.
|
|||
25
Hard man
07.04.09
✎
16:29
|
(24) Так не интересно.
|
|||
26
ЭЦ
07.04.09
✎
16:37
|
ГОСПОДА
В файлах котировки ценных бумаг Но какое это имеет значение? |
|||
27
H A D G E H O G s
07.04.09
✎
16:39
|
(26) Ойк. 500$ и все вам сделаю.
|
|||
28
Hard man
07.04.09
✎
16:40
|
(26) Как это какое? Попробуй громко и отчётливо читать "Отче наш" встав возле церкви, сразу узнаешь какое.
|
|||
29
Hard man
07.04.09
✎
16:41
|
+ (28) Задом наперёд конечно читать.
|
|||
30
hhhh
07.04.09
✎
16:41
|
(26) и что текстовый файл котировки ценных бумаг приближается к 1 ГБ? Это фантастика.
|
|||
31
Господин ПЖ
07.04.09
✎
16:47
|
текстовой файл по своей сути последовательно пишется и читается. Хотите "произвольный доступ" - пользуйте соответствующие структуры
|
|||
32
H A D G E H O G s
07.04.09
✎
16:48
|
(31) Что в этом мире не есть "текстовый файл" ? :-)
|
|||
33
Господин ПЖ
07.04.09
✎
16:49
|
в конце концов забросить с таблицу sql и выбрать нужное. если fso и т.п. - это медленно.
|
|||
34
Господин ПЖ
07.04.09
✎
16:50
|
(32) ну грубо говоря все состоит из символов. Но txt и mdf+ldf - две большие разницы по возможностям
|
|||
35
romix
модератор
07.04.09
✎
16:52
|
Книга знаний: Пример чтения и записи текстовых файлов (Scripting.FileSystemObject)
Чтение с конца м.б. придется имитировать через многократное чтение, буферизуя строк по 100. А м.б. там метод seek есть, надо смотреть. |
|||
36
romix
модератор
07.04.09
✎
16:59
|
Или можно разрубить на мелкие файлики, только потом не забыть их стереть.
|
|||
37
Serg_1960
07.04.09
✎
17:29
|
ALL: после прочтения постов, мой вариант (19) мне уже не кажется бредом :)
(36) Ага. Сделать такую мелкую гальотинку и порубить на файлики... авторов :) |
|||
38
Господин ПЖ
07.04.09
✎
17:32
|
(37) не бред. Только в dbf будет медленно. Bulk Insert или DTS так просто не обгонишь.
|
|||
39
Serg_1960
07.04.09
✎
17:38
|
(38) Медленно - согласен. Но пусть сначала автор озвучит сколько строк в его файлике - кроме того что он "сильно большой". А то может быть и не стоит огород городить...
|
|||
40
Torquader
07.04.09
✎
19:56
|
Scripting.FileSystemObject позволяет пропускать данные (Skip).
Но, чтобы прочитать последнюю строку файла нужно сначала найти разделитель последней и предпоследней строк, а это можно сделать только последовательным чтением файла сначала. Также хочу заметить, что данная функция честно читает файл по строкам, а не весь сразу в память, чем существенно экономит память и повышает производительность. Хотя, можно читать файл посимвольно назад. Для этого можно делать следующее: Функция ЧитаемФайлВЗад(ИмяФайла) FsoObject=new ActiveXObject("Scripting.FileSystemObject"); Файл=FsoObject.GetFile(ИмяФайла); РазмерФайла=Файл.Size;// получили размер файла Файл=0;// сбросили ссылку на всякий пожарный СтрокаНакопитель=""; for(ТекущийБайт=1;ТекущийБайт<РазмерФайл;ТекущийБайт++)do УказательФайл=FsoObject.OpenTextFile(ИмяФайла,1,false,false); // мы открыли файл ИмяФайла // для чтения-1 // не создавать если его нет-false // без Unicode-false УказательФайл.Skip(РазмерФайла-ТекущийБайт); ПрочитанныйБайт=УказательФайл.Read(1);// читаем байт КодБайта=Asc(ПрочитанныйБайт); // дело в том, что символ 0 передаётся, как строка нулевой длины СтрокаНакопитель=СтрокаНакопитель+","+String(КодБайта); УказательФайл.Close();// не забываем закрыть файл // к сожалению, в системе нет метода Rewind, чтобы вернуться назад // теоретически, есть метод Line, возвращающий номер строки // но я не уверен, что там будет правильная информация, после Skip enddo; Message(СтрокаНакопитель); КонецФункции |
|||
41
Torquader
07.04.09
✎
19:59
|
P.S. код писался с лёту, поэтому работоспособность не гарантиую (по крайней мере описание цикла не будет работать ни в одном мне известном языке) - перевод с JavaScript на 1С - сложное дело.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |