Работа с файлами

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
pilotav
Посетитель
Сообщения: 31
Зарегистрирован: 27 Май 2011, 12:54

Работа с файлами

Сообщение pilotav »

Добрый день, коллеги.
Вопрос конечно глупый, но я что-то не понимаю, что в приведенном коде не правильно. Clarion 2
Файл, с которым работаю dat, получен из dbf путем конвертации родным кларионовским конвертером. В нем 4 записи. при этом в приведенном коде проходит только один цикл, т.е. вычитывается только первая запись и все.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MEMBER ('GLadmin')
EXPORT_DBF PROCEDURE

cdbf FILE, PRE(C1),NAME('..\cvetdbf.dat')
Record RECORD
KOD REAL
NAME STRING(10)
S_NAME STRING(20)
. .
code
OPEN(cdbf)
SHARE(GL_CVET)
LOCK(GL_CVET)
SET(cdbf)
LOOP UNTIL EOF(cdbf)
NEXT(cdbf)
CLEAR(CVT:Record )
CVT:KOD = C1:KOD
CVT:NAME = C1:NAME
CVT:S_NAME = C1:S_NAME
ADD(GL_CVET)
END
UNLOCK(GL_CVET)

++++++++++++++++
Спасибо
Андрей
BOB
Ветеран
Сообщения: 336
Зарегистрирован: 17 Июль 2005, 5:43

Re: Работа с файлами

Сообщение BOB »

Считывается все , посмотри в GL_CVET ключи на уникальность и вставь после ADD(GL_CVET) типа if errorcode() message(error()) end
pilotav
Посетитель
Сообщения: 31
Зарегистрирован: 27 Май 2011, 12:54

Re: Работа с файлами

Сообщение pilotav »

Как проверить индексы на уникальность?
Пробовал так - перед запускаом приложения - удалил файлы для Ключей GL_CVET. Соответственно они были срозданы заново.
Ситуация таже.
А как влияют ключи GL_CVET на чтение из файла "источника"

Спасибо
Андрей
BOB
Ветеран
Сообщения: 336
Зарегистрирован: 17 Июль 2005, 5:43

Re: Работа с файлами

Сообщение BOB »

А как влияют ключи GL_CVET на чтение из файла "источника"
Да никак , у вас читаются скорее всего все строки , записываются не все . Чтобы это выяснить поставте после ADD(GL_CVET) строку if errorcode() message(error()) end если есть ошибки записи вы их увидите, заодно и посчитаете сколько строк считывается , на четыре записи у вас будет три ошибки .
pilotav
Посетитель
Сообщения: 31
Зарегистрирован: 27 Май 2011, 12:54

Re: Работа с файлами

Сообщение pilotav »

Следующий код,

OPEN(cdbf)
run('echo rn= ' & RECORDS(cdbf))
SET(cdbf)

NEXT(cdbf)
run('echo r=' & C1:KOD)
run('echo r=' & C1:NAME)
run('echo r=' & C1:S_NAME)
run('echo ' & EOF(cdbf))
if errorcode()
run('echo error')
.
NEXT(cdbf)
run('echo r=' & C1:KOD)
run('echo r=' & C1:NAME)
run('echo r=' & C1:S_NAME)
run('echo ' & EOF(cdbf))

NEXT(cdbf)
run('echo r=' & C1:KOD)
run('echo r=' & C1:NAME)
run('echo r=' & C1:S_NAME)
run('echo ' & EOF(cdbf))

NEXT(cdbf)
run('echo r=' & C1:KOD)
run('echo r=' & C1:NAME)
run('echo r=' & C1:S_NAME)
run('echo ' & EOF(cdbf))

NEXT(cdbf)
run('echo r=' & C1:KOD)
run('echo r=' & C1:NAME)
run('echo r=' & C1:S_NAME)
run('echo ' & EOF(cdbf))

++++++++++++++++++++
Дает следующий результат

rn= 4
r=1
r=AAAA
r=AAAAA
1
r=1
r=AAAA
r=AAAAA
1
r=1
r=AAAA
r=AAAAA
1
r=1
r=AAAA
r=AAAAA
1
r=1
r=AAAA
r=AAAAA
1

Т.е. получается, что навигации по файлу нет. Количество записей возвращается правильно - 4 штуки, но вот NEXT() свое не отрабатывает.

Я всетаки думаю, что проблемма в индексе для файла cdbf. Как его можно программно создать?
Потому, что если я объявлю файл с описанием индекса, соответственно получаю ошибку - "Incorrect record declaration" - потому, что в полученном dat файле нет описаниея индекса.

Спасибо
Андрей
Аватара пользователя
samo_let
Посетитель
Сообщения: 42
Зарегистрирован: 26 Январь 2009, 16:24

Re: Работа с файлами

Сообщение samo_let »

Попробуй так:

OPEN(cdbf)
IF ErrorCode() Then Stop(Error()).
Clear(C1:Record)
SET(cdbf)
LOOP
NEXT(cdbf)
If ErrorCode()
Stop('Next Err='& Error())
Break
End
stop(C1:KOD)
END
Что получаешь?
pilotav
Посетитель
Сообщения: 31
Зарегистрирован: 27 Май 2011, 12:54

Re: Работа с файлами

Сообщение pilotav »

c небольшой косметикой работает.

Спасибо двойное - за код и за понимание как работает debuger.

Сейчас попробую это применит.
pilotav
Посетитель
Сообщения: 31
Зарегистрирован: 27 Май 2011, 12:54

Re: Работа с файлами

Сообщение pilotav »

Работает. Спасибо
Только вот спортивный интерес - что ж не правильно было в начальном коде?
Аватара пользователя
samo_let
Посетитель
Сообщения: 42
Зарегистрирован: 26 Январь 2009, 16:24

Re: Работа с файлами

Сообщение samo_let »

ХЗ - думаю, что SET устанавливал произвольно начальную позицию от которой производились NEXT-ы
Вполне м.б. на последней записи стоял. Clear(Record) скорее всего помог...
И лучше UNTIL EOF не использовать - быстрее будет работать, если как я написал - проверять после NEXT на ошибку.
Ответить