Чтение и запись Ascii файлов

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Evgeny2006
Бывалый
Сообщения: 61
Зарегистрирован: 23 Июль 2010, 13:44
Откуда: С-Петербург

Чтение и запись Ascii файлов

Сообщение Evgeny2006 »

Мне необходимы в программе чтение и запись Ascii файлов.
Можно, конечно, использовать драйвер Клаши, но как-то не нравится.
Полез по журналам в поиске нечто подобного. Нашел в журнале №11,12 за 2002г и №4 за 2003 г.
Приведен класс для работы с такими файлами. Вставил себе в прогу, предварительно откорректировав версию 5.5 на 6.0.
Трансляция и линкование проходят нормально, а при запуске прога срывается, говоря об исключительном случае в системе, типа "память ... не может быть read".
Вопрос! Как вставить класс в программу и нужно ли что для этого делать дополнительно?
Evgeny2006
Аватара пользователя
Andrew Listiev
Активист
Сообщения: 166
Зарегистрирован: 07 Июль 2005, 11:16
Откуда: Латвия, Рига

Re: Чтение и запись Ascii файлов

Сообщение Andrew Listiev »

Как-то вам не особо отвечают :roll:
Зайдите сюда и найдите класс TFile http://www.clarionlife.net/index.php?op ... ing=newest Думаю вам сгодиться :)
Evgeny2006
Бывалый
Сообщения: 61
Зарегистрирован: 23 Июль 2010, 13:44
Откуда: С-Петербург

Re: Чтение и запись Ascii файлов

Сообщение Evgeny2006 »

Andrew Listiev писал(а):Как-то вам не особо отвечают :roll:
Зайдите сюда и найдите класс 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 файлов

Сообщение Andrew Listiev »

Не буду долго объяснять, просто приведу пример производного класса TTextFile

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_
TTextFile.clw

Код: Выделить всё

   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
Чистоту кода не гарантирую, так как уже на Кларион практически не пишу :wink:
Evgeny2006
Бывалый
Сообщения: 61
Зарегистрирован: 23 Июль 2010, 13:44
Откуда: С-Петербург

Re: Чтение и запись Ascii файлов

Сообщение Evgeny2006 »

Andrew Listiev писал(а):Как-то вам не особо отвечают :roll:
Зайдите сюда и найдите класс TFile http://www.clarionlife.net/index.php?op ... ing=newest Думаю вам сгодиться :)
Не сразу связал ссылку, которую Вы мне любезно дали, с Вашим авторством.
Если это так, то нельзя ли дать пример использования Tfile ?
Evgeny2006
Evgeny2006
Бывалый
Сообщения: 61
Зарегистрирован: 23 Июль 2010, 13:44
Откуда: С-Петербург

Re: Чтение и запись Ascii файлов

Сообщение Evgeny2006 »

Сообщение Andrew Listiev » 30 Сентябрь 2010, 18:05
Не буду долго объяснять, просто приведу пример производного класса TTextFile
Спасибо за приведенный класс. Обязательно попробую.
Как-то получилось, что Ваши сообщения отправленные почти одновременно, появились в разное время.
Когда я отвечал первый раз, примера класса не было.
Еще раз огромное спасибо.
И просьбочка к Вам. Нельзя ли показать на примере, как этот класс применять?
Я опять не вижу OPEN.
Evgeny2006
Аватара пользователя
Andrew Listiev
Активист
Сообщения: 166
Зарегистрирован: 07 Июль 2005, 11:16
Откуда: Латвия, Рига

Re: Чтение и запись Ascii файлов

Сообщение Andrew Listiev »

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!'
Названия методов точно соответствуют их функцоиналу. Что не понятно-то?
Evgeny2006
Бывалый
Сообщения: 61
Зарегистрирован: 23 Июль 2010, 13:44
Откуда: С-Петербург

Re: Чтение и запись Ascii файлов

Сообщение Evgeny2006 »

Новое сообщение Andrew Listiev » 30 Сентябрь 2010, 18:45
Open чего? Вот маленький пример:
Прежде чем получить доступ к файлу, его надо открыть . Обычно, в том числе и в Клаше, это выполняет команда (оператор, функция) OPEN. О ней речь и идет. За пример опять спасибо. Сейчас попробую.
Evgeny2006
Evgeny2006
Бывалый
Сообщения: 61
Зарегистрирован: 23 Июль 2010, 13:44
Откуда: С-Петербург

Re: Чтение и запись Ascii файлов

Сообщение Evgeny2006 »

Сообщение Andrew Listiev » 30 Сентябрь 2010, 18:45
Open чего? Вот маленький пример:
.......
.......
Что-то непонятно ....
Нет пример все ставит на свое место.
Вот только вопрос, для чего нужен "GlobalHookID Long" ?
И еще забавный момент, который я даже не знаю к чему отнести.
Ставлю Ваш пример "logfile" из общего пакета - все в порядке.
Тут же запускаю Ваш последний пример, вываливает около 30 ошибок.
При этом ошибки в самом начале, т.е. в Include. Он как бы не воспринимается. Понимаю, что причина либо в Клаше, либо в моей ОС.
Вроде регистры чищу, но где-то есть глюк.
Спасибо Вам огромное за участие. Буду разруливать дальше.
Evgeny2006
Evgeny2006
Бывалый
Сообщения: 61
Зарегистрирован: 23 Июль 2010, 13:44
Откуда: С-Петербург

Re: Чтение и запись Ascii файлов

Сообщение Evgeny2006 »

Тут же запускаю Ваш последний пример, вываливает около 30 ошибок.
При этом ошибки в самом начале, т.е. в Include. Он как бы не воспринимается. Понимаю, что причина либо в Клаше, либо в моей ОС.
Вроде регистры чищу, но где-то есть глюк.
Спасибо Вам огромное за участие. Буду разруливать дальше.
На эту часть сообщения не стоит обращать внимание, т.к. это ошибки у меня.
Тоже ведь надо было найти. Проблема в том, что один из текстовых редакторов (я использую Блокнот-AKelPad,WordPad и NotePad++) при перекопировании с места на место - глючит. Я подозреваю, что это AkelPad, но системный Блокнот изчез из контекстного меню. Так вот сегодня я использовал AkelPad и он сместил мне весь текст класса вправо. Отсюда и прорва ошибок. Хотя в какой-то момент все работало нормально.
Evgeny2006
Ответить