BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Определение конца двоичного файла

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Определение конца двоичного файла
 
Подскажите, пожалуйста, как вычислить конец двоичного файла. Функция EOF() для двоичных файлов работать не хочет.
 
Цитата
FSeek() - Устанавливает указатель файла в пределах файла.

Синтаксис

FSeek( <nHandle>, <nOffset>, [<nOrigin>] ) --> nPosition

Параметры

<nHandle>

<nHandle> - целое числовое значение (дескриптор файла), которое возвращает функции FCreate() или FOpen().

<nOffset>

<nOffset> - целое числовое значение, указывающее число байт, на которое должен переместиться указатель файла, начиная от позиции <nOrigin>. Значение <nOffset> может быть как отрицательным числом, так и положительным, в зависимости от направления перемещения указателя.

<nOrigin>

<nOrigin> - начальная позиция, от которой указатель файла начинает перемещение. Хранящиеся в заголовочном файле Fileio.ch константы устанавливают эту позицию.

Начальная позиция перемещения указателя

Значение Константа Файловая операция
--------------------------------------------------------------
0 FS_SET *) Позиция с начала файла
1 FS_RELATIVE Текущая позиция указателя файла
2 FS_END Позиция с конца файла

Для перемещения указателя файла от позиции FS_END значение <nOrigin> должно быть отрицательным.

Возвращаемое значение функции

FSeek() возвращает целое числовое значение, соответствующее позиции указателя файла относительно начала файла.

Описание

Функция FSeek() перемещает указатель файла в открытом файле. Содержимое файла при таком перемещении не читается. Указатель файла не может выйти за границы начала и конца файла. Исходная позиция указателя файла устанавливается аргументом <nOrigin> и может быть или началом файла, или концом файла, или текущей позицией указателя файла. FSeek() возвращает новую позицию указателя файла.

#include: Fileio.ch

Смотрите также:

FClose()
FCreate()
FError()
FOpen()



ПРИМЕР:
// FSeek()
// В этом примере приведены пользовательские функции, выполняющие те же действия,
// что и Eof(), Bof(), DbSkip(), DbGoTop() и DbGoBottom() для DBF файлов.
// Каждые 20 байт открытого файла, то есть сам текст, выводится на экран.

#include "Fileio.ch"

#define F_HANDLE 1
#define F_POS 2
#define F_LASTREC 3

PROCEDURE Main
LOCAL aFile

aFile := F_Use( "TEST.TXT" ) // открыть файл

? F_Bof( aFile ) // результат: .T.

DO WHILE ! F_Eof( aFile ) // Непрерывное чтение каждых 20 байт
?? F_Read( aFile, 20 ) // из файла, пока не будет достигнут
ENDDO // конец файла.
FClose( aFile[F_HANDLE] )
RETURN

** Открытие файла
FUNCTION F_Use( cFileName )
LOCAL aFile := { 0, 0, 0 }

aFile[ F_HANDLE ] := FOpen( cFileName, FO_READWRITE )

IF FError() == 0
aFile[ F_LASTREC ] := FSeek( aFile[F_HANDLE], 0 , FS_END )

FSeek( aFile[F_HANDLE], 0 , FS_SET )
ENDIF
RETURN aFile

** Перейти в начало файла
FUNCTION F_GoTop( aFile )
aFile[ F_POS ] := FSeek( aFile[F_HANDLE], 0 , FS_SET )
RETURN NIL

** Перейти в конец файла
FUNCTION F_GoBottom( aFile )
aFile[ F_POS ] := FSeek( aFile[F_HANDLE], 0 , FS_END )
RETURN NIL

** Пропустить указатель файла на nBytes
FUNCTION F_Skip( aFile, nBytes )
aFile[ F_POS ] := FSeek( aFile[F_HANDLE], nBytes, FS_RELATIVE )
RETURN aFile[ F_POS ]

** Чтение символов
FUNCTION F_Read( aFile, nBytes )
LOCAL cBuffer := Space( nBytes )
nBytes := FRead( aFile[F_HANDLE], @cBuffer, nBytes )
aFile[ F_POS ] += nBytes
RETURN Left( cBuffer, nBytes )

** Проверка на начало файла (ВOF)
FUNCTION F_Bof( aFile )
RETURN aFile[ F_POS ] == 0

** Проверка на конец файла (EOF)
FUNCTION F_Eof( aFile )
RETURN aFile[ F_POS ] == aFile[ F_LASTREC ]
С уважением,
Ильин Евгений
 
Спасибо. Еще бы ссылку на учебник, из которого это взято, чтобы больше не отвлекать мэтров от медитации.
А я, как всегда, выкрутился - передал число записей через файл-исходник.
В рождаемой ныне в муках проге вынужден за отсутствием пока у БЭСТ-5 3.4 экспорта ведомостей по спискам на перечисление в DBF-формат сначала пихать их в текстовой файл, затем плагином заталкивать в DBF, затребованный банком.
Торжественно обещаю, как рожу, предоставить плагин на всеобщее обозрение - буду рад, если кого порадует, хотя бы вместе посмемся.
 
Это стандартные функции Clipper'а - см. любой учебник/справочник по нему ;)
 
А какие проблемы сразу выгружать в требуемый dbf-формат ?
С уважением,
Ильин Евгений
 
Данный вариант показался менее трудоемким.
Для меня проблемно наковырять в таблицах БЭСТа нужные поля для выгрузки, особенно после того, что сделали со списками на перечисление в банк в БЭСТ-5 3.4.
Хотя по большому счету банку нужны всего 5 параметров: фамилия, имя, отчество, номер пластиковой карточки и сумма. Ну еще итого в последней строке.
В идеале, конечно, нужна выгрузка не по отдельной ведомости на перечисление в банк, а по группе ведомостей одного, скажем вида (кода списка).
Т.е. все, что перечисляют, скажем, Иванову И.И. в текущем месяце по спискам на перечисление в банк с кодом, скажем, 008, должно быть выгружено ему общей суммой.
Особенно это надо для бюджетников, у которых по определению одному и тому же сотруднику начисляют деньги по нескольким КБК.
Разработчики обещали доработку и в DBF, и с консолидацией, но обещанного три года ждут, а за горло плотно держат уже сейчас.
Страницы: 1
Читают тему (гостей: 1)