Работа с текстовым файлов как с строкой

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
Ветеран
Сообщения: 711
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

Работа с текстовым файлов как с строкой

Сообщение RaFaeL » 16 Сентябрь 2018, 20:22

У меня была задачка по работе с текстовым файлом, и там файлы как раз могли встречаться с разными вариантами конца строки, делал примерно так - грузим сначала файл в строку, делаем поиск <13,10>, если что-то нашли значит это "виндовый" формат, шлем в драйвер "EOF=2,13,10", переоткрываем, читаем по записям. Не нашли - шлем "1,10". Исходники утеряны, пример кода не смогу привести

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3517
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Работа с текстовым файлов как с строкой

Сообщение Игорь Столяров » 16 Сентябрь 2018, 20:52

RaFaeL писал(а):
16 Сентябрь 2018, 20:22
Исходники утеряны, пример кода не смогу привести
Ну тут всё сводится к простому определению "типа" текстового файла для параметров драйвера.
Т.е. Choose(InString('<13,10>' ... А хотелось бы ASCII драйвер не юзать. Совсем.
vic7tar писал(а):
16 Сентябрь 2018, 20:10
<-> наоборот.
Наверно да. Где-то в чертогах разума сидит ещё, что в DOS у клавиши ENTER был код 13. :)

Я вот подозревал, что всё непросто - потому и спросил ...
Если отбросить совсем футуристические варианты, то видимо действительно нужно искать перенос строки как <10>,
но но при этом убирать из строки возможный последний символ <13> и контролировать хвостик строки (конец файла). :)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 808
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с текстовым файлов как с строкой

Сообщение finsoftrz » 17 Сентябрь 2018, 9:04

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

LoadFile PROCEDURE (pName)

loc:szFile          CSTRING(FILE:MaxFileName)
loc:hFile           LONG
loc:dwSize          UNSIGNED
loc:lpFileSizeHigh  ULONG
loc:dwBytesRead     ULONG
loc:bRead           BOOL

loc:StrBuf          &CString

loc:ok  byte

   CODE

      loc:szFile=pName
      loc:hFile = CreateFile(loc:szFile,GENERIC_READ,0,0,OPEN_EXISTING,0,0)
      if loc:hFile <> INVALID_HANDLE_VALUE
         loc:dwSize = GetFileSize(loc:hFile,loc:lpFileSizeHigh)
         if loc:dwSize > 0
            loc:StrBuf &= new(CSTRING(loc:dwSize))
            loc:bRead = ReadFile(loc:hFile,ADDRESS(loc:StrBuf),SIZE(loc:StrBuf),loc:dwBytesRead,0)
            loc:ok=1
         end
         CloseHandle(loc:hFile)
      end

Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 808
Зарегистрирован: 06 Ноябрь 2014, 12:48

Работа с текстовым файлов как с строкой

Сообщение finsoftrz » 17 Сентябрь 2018, 9:05

Прототипы.

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

     MODULE('WINAPI')      
    CreateFile(*CSTRING,ULONG,ULONG,LONG,ULONG,ULONG,UNSIGNED=0),UNSIGNED,RAW,PASCAL,NAME('CreateFileA')
       GetFileSize(UNSIGNED,*ULONG),ULONG,PASCAL,NAME('GetFileSize')
       ReadFile(UNSIGNED,LONG,ULONG,*ULONG,LONG),BOOL,PASCAL,RAW,NAME('ReadFile')
       WriteFile(UNSIGNED,<*?>,ULONG,*ULONG,<*?>),BOOL,PASCAL,RAW,PROC
       CloseHandle(UNSIGNED),BOOL,PASCAL,PROC,NAME('CloseHandle')
     END
Рязань решает.

Аватара пользователя
vic7tar
Активист
Сообщения: 103
Зарегистрирован: 09 Февраль 2017, 20:12

Работа с текстовым файлов как с строкой

Сообщение vic7tar » 17 Сентябрь 2018, 11:42

finsoftrz писал(а):
17 Сентябрь 2018, 9:04
loc:StrBuf &= new(CSTRING(loc:dwSize))
loc:StrBuf &= new(CSTRING(loc:dwSize + 1))
C10, Win10x64

Ответить