Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Поиск в текстовом файле

30 views
Skip to first unread message

S_Stepanov

unread,
Jan 29, 2007, 5:55:23 AM1/29/07
to
Hi All,

FPD 2.6, есть таблица первое поле-код, второе имя текстового файла в который
занесён этот код, по клавише F3, открывается этот файл(он очень большой по
размеру..) для просмотра (modify program имя файла), но в этом открываемом
файле очень много кодов и их описание, нельзя ли сделать так, чтоб курсор
после открытия файла, вставал сразу же на этот код..,

Igor Shanuk

unread,
Jan 30, 2007, 5:58:00 PM1/30/07
to
Hi, S_Stepanov!

29 Янв 2007г. (Понедельник) S_Stepanov писал All:

> ...
SS> FPD 2.6, есть таблица первое поле-код, второе имя текстового файла в
SS> который занесён этот код, по клавише F3, открывается этот файл(он очень
SS> большой по размеру..) для просмотра (modify program имя файла), но в этом
SS> открываемом файле очень много кодов и их описание, нельзя ли сделать так,
SS> чтоб курсор после открытия файла, вставал сразу же на этот код..,
> ...

Хех, давно это было, но попробую напрячь мозговую мышцу...

В команде modify file\program есть опция range, позволяющая открыть текстовый
файл, выделив кусок текста от символа в позиции <expN2>, до символа в позиции
<expN3>. Если <expN2> = <expN3>, текст не выделяется, и курсор помещается в
позицию <expN2>.

RANGE <expN2>, <expN3>
RANGE lets you open a text editing window with a range of
characters selected. Characters are selected starting at
the position specified with <expN2> up to (but not
including) the <expN3>rd character. If <expN2> is equal
to <expN3>, no characters are selected, and the cursor is
placed at the position specified with <expN2>.

По-моему, это то, что тебе нужно. Дело за немногим - вычислить значения этих
<expN2>, <expN3>


WBR&W, Igor Shanuk

S_Stepanov

unread,
Jan 31, 2007, 9:13:48 PM1/31/07
to
Wed Jan 31 2007 01:58, Igor Shanuk wrote to S_Stepanov:

IS> Hi, S_Stepanov!

IS> 29 Янв 2007г. (Понедельник) S_Stepanov писал All:

>> ...
SS>> FPD 2.6, есть таблица первое поле-код, второе имя текстового файла в
SS>> который занесён этот код, по клавише F3, открывается этот файл(он очень
SS>> большой по размеру..) для просмотра (modify program имя файла), но в

SS>> этом открываемом файле очень много кодов и их описание, нельзя ли
SS>> сделать так, чтоб курсор после открытия файла, вставал сразу же на этот
SS>> код..,
>> ...

IS> Хех, давно это было, но попробую напрячь мозговую мышцу...

IS> В команде modify file\program есть опция range, позволяющая открыть
IS> текстовый файл, выделив кусок текста от символа в позиции <expN2>, до
IS> символа в позиции

<expN3>> . Если <expN2> = <expN3>, текст не выделяется, и курсор помещается в

IS> позицию <expN2>.

IS> RANGE <expN2>, <expN3>
IS> RANGE lets you open a text editing window with a range of
IS> characters selected. Characters are selected starting at
IS> the position specified with <expN2> up to (but not
IS> including) the <expN3>rd character. If <expN2> is equal
IS> to <expN3>, no characters are selected, and the cursor is
IS> placed at the position specified with <expN2>.

IS> По-моему, это то, что тебе нужно. Дело за немногим - вычислить значения
IS> этих

<expN2>> , <expN3>

Да, вот это и немногое, вызывает много трудностей, если я и открою этот файл
fopen(), но есть ли такая же низкоуровневая функция поиска... и самое главное,
что передавать в этот ранг для modify command...

Alexandr Strelnikov

unread,
Jan 31, 2007, 10:35:23 PM1/31/07
to
Hi, S_Stepanov!

01 Feb 2007 05:13, S_Stepanov wrote to Igor Shanuk:

SS> если я и открою этот файл fopen(), но есть ли такая же низкоуровневая
SS> функция поиска...

1. в цикле до feof() читаешь через fread() или fgets()
2. через at() анализируешь считанное

_len=0
do while .not. feof(_file)
_line = fgets(_file)
_poz = at('что_надо',_line)
if _poz = 0
_len = _len+len(_line)
else
_len = _len+_poz
exit
endif
enddo

Alexandr

Vladimir Maksimov

unread,
Feb 1, 2007, 9:36:44 AM2/1/07
to
Mon Jan 29 2007 13:55, S_Stepanov wrote to All:

SS> From: "S_Stepanov" <mi...@kraspost.ru>

SS> Hi All,

SS> FPD 2.6, есть таблица первое поле-код, второе имя текстового файла в
SS> который занесён этот код, по клавише F3, открывается этот файл(он очень
SS> большой по размеру..) для просмотра (modify program имя файла), но в этом
SS> открываемом файле очень много кодов и их описание, нельзя ли сделать так,
SS> чтоб курсор после открытия файла, вставал сразу же на этот код..,

================
Как вариант

CREATE CURSOR Contents (Content M)
APPEND BLANK
APPEND MEMO Contents.Content FROM MyFile.txt

Содержимое мемо-поля, с точки зрения FoxPro, это обычная символьная строка.
Правда, очень большая. Т.е. в ней можно выполнять поиск обычными командами
строкового поиска AT().

Далее так же как и с Modify Program

MODIFY MEMO Contents.Content RANGE <expN1>, <expN2>

При желании, можно сбросить внесенные изменения обратно в файл командой

COPY MEMO Contents.Content TO MyFile.txt

В принципе, можно использовать и Modify Program. Просто через Memo-поля
выполняя поиск нужных позиций в текстовом файле. Это удобнее чем построчное
чтение через FOPEN(), FGETS().

Igor Shanuk

unread,
Feb 1, 2007, 4:17:00 PM2/1/07
to
Hi, S_Stepanov!

01 Фев 2007г. (Четверг) S_Stepanov писал Igor Shanuk:

> ...
>>> ...


SS>>> FPD 2.6, есть таблица первое поле-код, второе имя текстового файла в
SS>>> который занесён этот код, по клавише F3, открывается этот файл(он очень
SS>>> большой по размеру..) для просмотра (modify program имя файла), но в

SS>>> этом открываемом файле очень много кодов и их описание, нельзя ли
SS>>> сделать так, чтоб курсор после открытия файла, вставал сразу же на этот
SS>>> код..,
>>> ...

IS>> По-моему, это то, что тебе нужно. Дело за немногим - вычислить значения
IS>> этих <expN2>> , <expN3>

SS> Да, вот это и немногое, вызывает много трудностей, если я и открою этот
SS> файл fopen(),

Хм... Если ты не сможешь открыть файл функцией fopen(), то и команда modify
file скорее всего тоже не сможет его открыть.

SS> но есть ли такая же низкоуровневая функция поиска...

На то она и низкоуровневая работа с файлом, что оперируя довольно ограниченым
набором соответствующих функций можно делать все, что захочешь. Например,
написать свою функцию поиска нужного значения в ASCII-файле. Скажем так
- читаешь файл построчно функцией fgets() пока файл не кончится
- в каждой строке ищешь нужное тебе значение
- если нашел - пересчитываешь номер первого символа в строке в значение <expN2>
которое является так же и значением <expN3> и поиск заканчиваешь.

SS> и самое
SS> главное, что передавать в этот ранг для modify command...

Позицию начала и конца выделенного блока текста. В конце-концов, открой
какой-нибудь файл из командного окна, да поэкспериментируй пару раз.

WBR&W, Igor Shanuk

0 new messages