Чтение и запись Ascii файлов
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Бывалый
- Сообщения: 61
- Зарегистрирован: 23 Июль 2010, 13:44
- Откуда: С-Петербург
Чтение и запись Ascii файлов
Мне необходимы в программе чтение и запись Ascii файлов.
Можно, конечно, использовать драйвер Клаши, но как-то не нравится.
Полез по журналам в поиске нечто подобного. Нашел в журнале №11,12 за 2002г и №4 за 2003 г.
Приведен класс для работы с такими файлами. Вставил себе в прогу, предварительно откорректировав версию 5.5 на 6.0.
Трансляция и линкование проходят нормально, а при запуске прога срывается, говоря об исключительном случае в системе, типа "память ... не может быть read".
Вопрос! Как вставить класс в программу и нужно ли что для этого делать дополнительно?
Можно, конечно, использовать драйвер Клаши, но как-то не нравится.
Полез по журналам в поиске нечто подобного. Нашел в журнале №11,12 за 2002г и №4 за 2003 г.
Приведен класс для работы с такими файлами. Вставил себе в прогу, предварительно откорректировав версию 5.5 на 6.0.
Трансляция и линкование проходят нормально, а при запуске прога срывается, говоря об исключительном случае в системе, типа "память ... не может быть read".
Вопрос! Как вставить класс в программу и нужно ли что для этого делать дополнительно?
Evgeny2006
- Andrew Listiev
- Активист
- Сообщения: 166
- Зарегистрирован: 07 Июль 2005, 11:16
- Откуда: Латвия, Рига
Re: Чтение и запись Ascii файлов
Как-то вам не особо отвечают
Зайдите сюда и найдите класс TFile http://www.clarionlife.net/index.php?op ... ing=newest Думаю вам сгодиться

Зайдите сюда и найдите класс TFile http://www.clarionlife.net/index.php?op ... ing=newest Думаю вам сгодиться

-
- Бывалый
- Сообщения: 61
- Зарегистрирован: 23 Июль 2010, 13:44
- Откуда: С-Петербург
Re: Чтение и запись Ascii файлов
Да, тема, наверное, старая. Все ее уже давно прошли и поэтому такая вяло тягучая реакция.Andrew Listiev писал(а):Как-то вам не особо отвечают![]()
Зайдите сюда и найдите класс TFile http://www.clarionlife.net/index.php?op ... ing=newest Думаю вам сгодиться
Спасибо за ссылку. Скачал, попробовал. Что касается Tlogfile, то для записи она хорошо подходит и ей всенепременно воспользуюсь. Второй класс Tfile мне кажется универсальным, но к сожалению пример применения не приведен.
Ползая по классу не обнаружил так хорошо всем знакомого оператора (процедуры) OPEN. Есть INIT и Prepare и в тексте не очень понятно, как открыть файл на чтение.
Еще раз большое спасибо.
Evgeny2006
- Andrew Listiev
- Активист
- Сообщения: 166
- Зарегистрирован: 07 Июль 2005, 11:16
- Откуда: Латвия, Рига
Re: Чтение и запись Ascii файлов
Не буду долго объяснять, просто приведу пример производного класса TTextFile
TTextFile.def
TTextFile.clw
Чистоту кода не гарантирую, так как уже на Кларион практически не пишу 
TTextFile.def
Код: Выделить всё
OMIT('_EndOfInclude_',_TTextFilePresent_)
_TTextFilePresent_ EQUATE(1)
Include('TFile.def'), Once
EndOfLine Itemize(1), Pre()
Windows Equate
Unix Equate
End
TTextFile Class(TFile), Type, Module('TTextFile.clw'), Link('TTextFile.clw')
EndOfLine Byte
Init Procedure(String FileName), Virtual
Read Procedure(Long BufferSize = 256), String, Virtual, Proc
Skip Procedure(Long Count = 1), Virtual
Write Procedure(String Text), Virtual
END
_EndOfInclude_
Код: Выделить всё
Member()
Include('TTextFile.def'), Once
Map
End
TTextFile.Init Procedure(String FileName)
Code
Parent.Init(FileName)
Self.AccessMode = GENERIC_WRITE + GENERIC_READ
Self.ShareMode = FILE_SHARE_WRITE + FILE_SHARE_READ
Self.CreationDisposition = OPEN_ALWAYS
Self.Prepare()
Self.EndOfLine = EndOfLine:Windows
TTextFile.Skip Procedure(Long Count = 1)
Code
Loop Count Times
Self.Read()
End
TTextFile.Read Procedure(Long BufferSize = 256)
BufferString &String
Margin Long
FilePointer Ulong
ReturnValue Ulong
Code
If ~BufferString &= Null
Dispose(BufferString)
End
BufferString &= New String(BufferSize) ! Create string
BufferString[ Len(BufferString) ] = '<0>' ! Change string to Cstring
FilePointer = Self.GetPointer() ! Save current file pointer
ReturnValue = Self.Read( Address(BufferString), BufferSize ) ! Read file into Bufferstring
Margin = Instring('<10>', BufferString, 1, 1) ! Search CR/LF in Bufferstring
If Margin ! Found
Ambit# = Choose(BufferString[Margin - 1] = '<13>', 2, 1)
BufferString = BufferString[1 : Margin - Ambit#] ! Fill Bufferstring up to CR/LF - 1 symbol
Self.SetCurrentPointer(-(Self.GetPointer()-FilePointer-Margin)) ! Set Filepointer up to CR/LF + ? symbols
Else
Loop
FilePointer = Self.GetPointer() ! Save current file pointer
ReturnValue = Self.Read( Address(BufferString), BufferSize )
Margin = Instring('<10>', BufferString, 1, 1)
Until Margin Or ReturnValue
If Margin
Self.SetCurrentPointer(-(Self.GetPointer()-FilePointer-Margin))
End
End
Return Clip(BufferString)
TTextFile.Write Procedure(String Text)
TextToWrite &Cstring
Code
TextToWrite &= New Cstring(Len(Clip(Text)) + Choose(Self.EndOfLine, 3, 2))
TextToWrite = Clip(Text) & Choose(Self.EndOfLine, '<13,10>', '<10>')
Parent.Write(Address(TextToWrite), Size(TextToWrite) - 1)
If ~TextToWrite &= Null
Dispose(TextToWrite)
End

-
- Бывалый
- Сообщения: 61
- Зарегистрирован: 23 Июль 2010, 13:44
- Откуда: С-Петербург
Re: Чтение и запись Ascii файлов
Не сразу связал ссылку, которую Вы мне любезно дали, с Вашим авторством.Andrew Listiev писал(а):Как-то вам не особо отвечают![]()
Зайдите сюда и найдите класс TFile http://www.clarionlife.net/index.php?op ... ing=newest Думаю вам сгодиться
Если это так, то нельзя ли дать пример использования Tfile ?
Evgeny2006
-
- Бывалый
- Сообщения: 61
- Зарегистрирован: 23 Июль 2010, 13:44
- Откуда: С-Петербург
Re: Чтение и запись Ascii файлов
Спасибо за приведенный класс. Обязательно попробую.Сообщение Andrew Listiev » 30 Сентябрь 2010, 18:05
Не буду долго объяснять, просто приведу пример производного класса TTextFile
Как-то получилось, что Ваши сообщения отправленные почти одновременно, появились в разное время.
Когда я отвечал первый раз, примера класса не было.
Еще раз огромное спасибо.
И просьбочка к Вам. Нельзя ли показать на примере, как этот класс применять?
Я опять не вижу OPEN.
Evgeny2006
- Andrew Listiev
- Активист
- Сообщения: 166
- Зарегистрирован: 07 Июль 2005, 11:16
- Откуда: Латвия, Рига
Re: Чтение и запись Ascii файлов
Open чего? Вот маленький пример:
Названия методов точно соответствуют их функцоиналу. Что не понятно-то?
Код: Выделить всё
PROGRAM
GlobalHookID Long
Include('TTextFile.def'), Once
Out TTextFile
MAP
Hook(LONG nCode,ULONG wParam,LONG lParam), String
END
Code
Hook Function(LONG nCode,ULONG wParam,LONG lParam)
Code
Out.Init('hook.log')
Out.SetPointerToEnd()
Out.Write(nCode & wParam & lParam)
return 'Bla-Bla-Bla!'
-
- Бывалый
- Сообщения: 61
- Зарегистрирован: 23 Июль 2010, 13:44
- Откуда: С-Петербург
Re: Чтение и запись Ascii файлов
Прежде чем получить доступ к файлу, его надо открыть . Обычно, в том числе и в Клаше, это выполняет команда (оператор, функция) OPEN. О ней речь и идет. За пример опять спасибо. Сейчас попробую.Новое сообщение Andrew Listiev » 30 Сентябрь 2010, 18:45
Open чего? Вот маленький пример:
Evgeny2006
-
- Бывалый
- Сообщения: 61
- Зарегистрирован: 23 Июль 2010, 13:44
- Откуда: С-Петербург
Re: Чтение и запись Ascii файлов
Нет пример все ставит на свое место.Сообщение Andrew Listiev » 30 Сентябрь 2010, 18:45
Open чего? Вот маленький пример:
.......
.......
Что-то непонятно ....
Вот только вопрос, для чего нужен "GlobalHookID Long" ?
И еще забавный момент, который я даже не знаю к чему отнести.
Ставлю Ваш пример "logfile" из общего пакета - все в порядке.
Тут же запускаю Ваш последний пример, вываливает около 30 ошибок.
При этом ошибки в самом начале, т.е. в Include. Он как бы не воспринимается. Понимаю, что причина либо в Клаше, либо в моей ОС.
Вроде регистры чищу, но где-то есть глюк.
Спасибо Вам огромное за участие. Буду разруливать дальше.
Evgeny2006
-
- Бывалый
- Сообщения: 61
- Зарегистрирован: 23 Июль 2010, 13:44
- Откуда: С-Петербург
Re: Чтение и запись Ascii файлов
На эту часть сообщения не стоит обращать внимание, т.к. это ошибки у меня.Тут же запускаю Ваш последний пример, вываливает около 30 ошибок.
При этом ошибки в самом начале, т.е. в Include. Он как бы не воспринимается. Понимаю, что причина либо в Клаше, либо в моей ОС.
Вроде регистры чищу, но где-то есть глюк.
Спасибо Вам огромное за участие. Буду разруливать дальше.
Тоже ведь надо было найти. Проблема в том, что один из текстовых редакторов (я использую Блокнот-AKelPad,WordPad и NotePad++) при перекопировании с места на место - глючит. Я подозреваю, что это AkelPad, но системный Блокнот изчез из контекстного меню. Так вот сегодня я использовал AkelPad и он сместил мне весь текст класса вправо. Отсюда и прорва ошибок. Хотя в какой-то момент все работало нормально.
Evgeny2006