powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как осуществить поиск в текстовом файле с конца в VFP3.0
10 сообщений из 10, страница 1 из 1
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33700255
Yuliya_g
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток всем!
Подскажите пожалуйста, как можно в VFP 3.0 организовать поиск в текстовом файле? и причём поиск нужно вести с конца файла.

Благодарю заранее всех, кто откликнется.

С уважением, Юлия.
...
Рейтинг: 0 / 0
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33700463
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При любом раскладе придется закачать весь файл в переменные памяти и только потом делать поиск. Насколько я знаю, нет команд, которые могли бы искать справа налево.

Собственно, вариантов 2:

1) Используя FOPEN()+FGETS()+FCLOSE() считываешь построчно содержимое текстового файла и заносишь каждую строку в элементы массива. Потом делаешь поиск по этому массиву

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LOCAL laFile( 1 ), lnFH, lnI
lnI =  0 
lnFH = FOPEN("C:\Мои документы\Мой файл.txt")
DO WHILE FEOF(m.lnFH)=.F.
	lnI = m.lnI+ 1 
	laFile[m.lnI]=FGETS(m.lnFH)
	DIMENSION laFile(m.lnI+ 1 )
ENDDO
=FCLOSE(m.lnFH)
DIMENSION laFile(m.lnI)

Получаешь массив laFile в котором каждая строка - это одна строка текстового файла. В данном случае под термином "строка" подразумевается текст до символа возврата каретки или до 254 символов. Если строка может иметь более 254 символов, то надо указать в качестве второго параметра FGETS() предельно допустимое количество символов в одной строке.

Массив не может содержать более 65000 элементов. Если количество строк больше, то надо либо создавать несколько массивов, либо не хранить вообще все строки в массиве, а хранить только те строки, которые содержат нужную информацию.

2) Закачать весь текстовый файл в memo-поле и использовать функции разбора содержимого мемо-поля

Код: plaintext
1.
2.
3.
CREATE CURSOR curFile (Content M)
APPEND BLANK
APPEND MEMO Content FROM "C:\Мои документы\Мой файл.txt"

Далее можно работать с функциями MLINE(), MEMLINES() для разбора содержимого. Но в этом случае под одной строкой будет пониматься последовательность символов до символа перевода каретки или до количества символов, указанных в настройке SET MEMOWIDTH (по умолчанию -это 50 символов)

В принципе, с содержимым мемо-поля можно работать как с обычной символьной переменной. Т.е. использовать функции поиска в текстовой переменной вроде AT(), $, OCCURSE().

Размер мемо-поля не может превышать 2ГБ. Т.е. текстовый файл бОльшего размера таким способом невозможно обработать.
...
Рейтинг: 0 / 0
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33701197
ВладимирМНасколько я знаю, нет команд, которые могли бы искать справа налево.


А для чего функция RAT(cSearchExpression, cExpressionSearched [, nOccurrence]) ?!!!
...
Рейтинг: 0 / 0
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33701647
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Владимир__ ВладимирМНасколько я знаю, нет команд, которые могли бы искать справа налево.


А для чего функция RAT(cSearchExpression, cExpressionSearched [, nOccurrence]) ?!!!
Вы постановку задачи читали?

Yuliya_gорганизовать поиск в текстовом файле? и причём поиск нужно вести с конца файла
КАК здесь поможет функция RAT()?

При любом раскладе сначала придется закачать весь файл в переменные памяти и только потом что-то там искать... Можно и с помощью функции RAT(). Но это уже "потом".
...
Рейтинг: 0 / 0
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33701886
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолютно согласен с двумя предыдущими ораторами и предлагаю компромис
без массивов

Код: plaintext
1.
2.
3.
myfile=getfile()
mystr=filetostr(myfile)
pos=RAT('что ищем',mystr)
wait wind 'Первое вхождение с конца файла '+str(pos)
только с большими файлами торимоза наверно будут
...
Рейтинг: 0 / 0
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33701915
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция FileToStr() была введена только в версии VFP6. В данном случае речь идет о VFP3. Там это функции просто нет.

Впрочем, можно получить символьную строку из файла, прокачкой через мемо-поле. Это возможно в любой версии FoxPro.
...
Рейтинг: 0 / 0
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33702284
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно неучел :-(

но вот кусок Helpа VFP 6 из него очень легко можно сделать свою функцию FiletoStr

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Local gnFileHandle,nSize,cString
gnFileHandle = FOPEN("test.txt")
* Seek to end of file to determine the number of bytes in the file
nSize =  FSEEK(gnFileHandle,  0 ,  2 )     && Move pointer to EOF
IF nSize <=  0 
 * If the file is empty, display an error message
 WAIT WINDOW "This file is empty!" NOWAIT
ELSE
 * If file is not empty, the program stores its contents
 * in memory, then displays the text on the main Visual FoxPro window
 = FSEEK(ggnFileHandle,  0 ,  0 )      && Move pointer to BOF
 cString = FREAD(gnFileHandle, nSize)
 ? cString
ENDIF
= FCLOSE(gnFileHandle)    
так что невижу особых проблем.
...
Рейтинг: 0 / 0
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33705802
Yuliya_g
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю всех за помощь!
Буду теперь, пользуясь вашими советами, пытаться реализовывать.
...
Рейтинг: 0 / 0
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33719040
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi S866!

У FREAD() имеется ограничение на размер считываемого за раз блока, кроме
того FILETOSTR() может считывать и файлы превышающие по размеру 16Мб (лимит
на размер текстовой переменной в VFP), так что так вот просто полноценного
аналога FILETOSTR() не сделать.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как осуществить поиск в текстовом файле с конца в VFP3.0
    #33719327
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Igor Korolyov

я это знаю - но вопервых вдруг там файлы мелкие. при файлах в 16 мб - я думаю не очень быстро процесс пойдет и у filetostr
а во вторых - главное направить человека в правильном направлении а ограничения он и сам преодолеет (а не преодолеет так на форуме спросит)

с уважением Вячеслав
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как осуществить поиск в текстовом файле с конца в VFP3.0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]