прочитать текстовый файл с конца. его содержимое меняется

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

прочитать текстовый файл с конца. его содержимое меняется

Сообщение Shasha » 04.01.2007 (Чт) 21:34

Приветствую Вас!
как прочитать текстовый файл с конца?
как прочитать первые строки с начала я знаю =)
как считать последние строки? содержимое файла меняется и количество строк.
спасибо.
С Уважением,
Shasha

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.01.2007 (Чт) 21:46

Читать "с конца" нельзя. Можно прочитать весь файл :)

1. Загрузить файл в массив байт
2. Разбить Split'ом по разделителю vbCrLf

Строки имеют разную длину? Максимальная длина строки ограничена? Количество строк, которое надо считать, задано?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 04.01.2007 (Чт) 21:50

Seek?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 21:55

И куда предложишь сикать, если длина строк неизвестна наперёд?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 04.01.2007 (Чт) 22:05

Где автор сказал что длина строк неизвестна?
Читай вопрос внимательней.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2007 (Чт) 22:10

А где автор сказал, что она известна?
Вот Amed предложил универсальное решение, и начал задавать уточняющие вопросы. А ты предложил решение для частного случая, даже не уточняя, для какого именно. И кто из вас, выходит, невнимательно прочитал вопрос?
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.01.2007 (Чт) 22:24

BV, ты ошибся. Или, если не ошибся, тыкни пальцем. Мы не видим :)

Shasha, если текстовый файл очень большой, и читать его сразу весь в массив невыгодно по времени - можно читать с конца файла (длину файла знаем) кусок размером 100 байт. Ищем в куске N строк (N-1 повторений vbCrLf). Если не нашли - читаем еще 100 байт. И так, пока не найдем всё.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Re: прочитать текстовый файл с конца. его содержимое меняетс

Сообщение Alexanbar » 05.01.2007 (Пт) 0:00

Shasha писал(а):Приветствую Вас!
как прочитать текстовый файл с конца?
как прочитать первые строки с начала я знаю =)
как считать последние строки? содержимое файла меняется и количество строк.
спасибо.


А какие строки считаются последними? Скажем, 2-я строка - это последняя? А 3-я?

Так или иначе, нужно выбрать, с какого символа начинается этот хвост. А делее - дело техники, скажем,

Код: Выделить всё

myString=string(Длина_файла-StartPoint,chr(0))
Get #1, StartPoint, myString


Ну а далее можно поделить всё на строки с помощью Split и т.д.

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Сообщение Shasha » 05.01.2007 (Пт) 8:17

для внесения ясности.
это хистори qip. каждые скажем 10 секунд открываем текстовый файл и читаем строки
-------------------------------------->-
9 значный номер аси(17:02:33 30/10/2006)
стоп

была команда стоп, на неё стояла функция остановки для плеера. через 10 сек опять чтение. смотрит вторую строку, если она не изменилась то ничего не делаем. если изменилась, то читаем последнюю где каоманда если есть такая то выполняем.

довольно таки просто, но просто вышла проблемка с прочтением именно последних строк.

ещё какие нить советы будут?
С Уважением,
Shasha

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Сообщение Shasha » 05.01.2007 (Пт) 16:43

искал на днях на форуме, вот наткнулся (см аттач) в конце сообщения было написано что нельзя прочитать с заду на перед. а вэтом примере как раз так есть, так?
Вложения
Z.RAR
(2.23 Кб) Скачиваний: 75
С Уважением,
Shasha


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 93

    TopList