:: Visual Foxpro, Foxpro for DOS
* Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
alex;

Сообщений: 3402
Откуда: Москва
Дата регистрации: 23.11.2004
Не спалось. Пообщался с mistral
chat.mistral.ai
результат
* Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
CLEAR
cFileName = "c:\dev\vfp\test_append\proj1.pjx" && Замените на имя вашего файла
*INPUT
LOCAL lnFile, lnWord, lcHex, lnBytesRead, lnBlockSize, lnFileSize, lcString, lnIndex, lnTotalBytes
LOCAL lnLeft
*OUTPUT
LOCAL lnHexLine, lcHexLine, lcOut, m.lcHexLineView
m.lcOut = FORCEEXT(cFileName, "hex")
m.lnBlockSize = 16 && Размер блока для чтения
m.lnFile = FOPEN(cFileName, 0) && (Default) Read-only
IF m.lnFile = -1
WAIT WINDOW "Ошибка открытия файла" NOWAIT
?"Ошибка открытия файла"
RETURN
ENDIF
* Seek to end of file to determine number of bytes in the file.
m.lnFileSize = FSEEK(m.lnFile, 0, 2) && Move pointer to EOF
IF m.lnFileSize <= 0
* If file is empty, display an error message.
WAIT WINDOW "Этот файл пуст!" NOWAIT
?"Этот файл пуст!"
RETURN
ENDIF
STRTOFILE("", m.lcOut, .F.)
= FSEEK(m.lnFile, 0, 0) && Move pointer to BOF
m.lnTotalBytes = 0
m.lnHexLine = 0
m.lnLeft = m.lnFileSize
DO WHILE m.lnLeft > 0
m.lcString = FREAD(m.lnFile, MIN(m.lnBlockSize, m.lnLeft)) && Чтение блока данных
m.lnBytesRead = LEN(m.lcString)
IF m.lnBytesRead = 0
EXIT
ENDIF
m.lnTotalBytes = m.lnTotalBytes + m.lnBytesRead
m.lnLeft = m.lnFileSize - m.lnTotalBytes
m.lcHexLine = Hex8(m.lnHexLine) + ": "
FOR m.lnIndex = 1 TO m.lnBytesRead
m.lcChar = SUBSTR(m.lcString, m.lnIndex, 1)
m.lcHex = HexWord(ASC(m.lcChar))
m.lcHexLine = m.lcHexLine + m.lcHex
IF m.lnIndex = 8
m.lcHexLine = m.lcHexLine + "|"
ELSE
m.lcHexLine = m.lcHexLine + " "
ENDIF
ENDFOR
m.lcString = STRTRAN(m.lcString, CHR(9), ".")
m.lcString = STRTRAN(m.lcString, CHR(10), ".")
m.lcString = STRTRAN(m.lcString, CHR(13), ".")
STRTOFILE(m.lcHexLine + " | " + m.lcString + CHR(13) + CHR(10), m.lcOut, .T.)
m.lnHexLine = m.lnHexLine + 16
ENDDO
FCLOSE(m.lnFile) && Закрытие файла
MESSAGEBOX("Готово!")
RETURN
* Функция для преобразования слова в шестнадцатеричное представление
FUNCTION HexWord(tnWord, tlZeroX)
RETURN (IIF(m.tlZeroX,"0x","")+STRCONV(CHR(m.tnWord),15))
ENDFUNC
* Функция для преобразования числа в шестнадцатеричное представление с 8 символами
FUNCTION Hex8(tnNum)
IF m.tnNum = 0
RETURN REPLICATE("0", 8)
ENDIF
LOCAL lcHex, lnDigit
m.lcHex = ""
DO WHILE ABS(m.tnNum) > 0
m.lnDigit = BITAND(m.tnNum, 0x0F)
m.lcHex = SUBSTR("0123456789ABCDEF", m.lnDigit + 1, 1) + m.lcHex
m.tnNum = BITRShift(m.tnNum, 4)
ENDDO
RETURN PADL(m.lcHex, 8, "0")
ENDFUNC
Цитата:
Расшифровка заголовка:
00000000: 30 18 0A 19 03 00 00 00|A8 04 82 00 00 00 00 00 | 0. иВ |
00000010: 00 00 00 00 00 00 00 00|00 00 00 00 02 C9 00 00 | &#9556; |
Цитата:
Поля заголовка:
bVersion: 0x30 (48 в десятичной системе) — Версия формата DBF.
bYear: 0x18 (24 в десятичной системе) — Год последнего изменения (последний разрешенный символ).
bMonth: 0x0A (10 в десятичной системе) — Месяц последнего изменения.
bDay: 0x19 (25 в десятичной системе) — День последнего изменения.
ulRecCount: 0x03 00 00 00 — Количество записей в файле (3 записи).
uiHeaderLen: 0xA8 04 — Длина заголовка в байтах (1160 байт).
uiRecordLen: 0x82 00 — Длина одной записи в байтах (130 байт).
bReserved1: 0x00 00 — Резервированные байты.
bTransaction: 0x00 — Флаг транзакции (0 - нет транзакции).
bEncrypted: 0x00 — Флаг шифрования (0 - таблица не зашифрована).
bReserved2: 0x00 00 00 00 00 00 00 00 00 00 00 00 — Резервированные байты.
bHasTags: 0x02 — Битовое поле: 1 - производственный индекс, 2 - мемо-файл в VFP.
bCodePage: 0xC9 (201 в десятичной системе) — Кодовая страница.
bReserved3: 0x00 00 — Резервированные байты.
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
akvvohinc

Сообщений: 4560
Откуда: Москва
Дата регистрации: 11.11.2008
Думаю, обе функции преобразования в Hex естественнее делать с помощью
TRAN(number, '@0')

Например, Hex8 могла бы выглядеть так:
RIGHT(TRAN(number, '@0'), 8)

А если на входе символ, то получить на выходе его код в Hex без превращения в число, можно, например, так:
TRAN(0h + <char>)



Исправлено 4 раз(а). Последнее : akvvohinc, 07.11.24 07:58
Ratings: 0 negative/1 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
kornienko_ru

Сообщений: 415
Откуда: Владивосток
Дата регистрации: 06.09.2015
alex;
а есть способ из визуального класса (файлы с расширениями vct и vcx) сделать текстовую библиотеку с расширением prg. Ну или извлечь какой-то класс в prg?
PS
Вот, что я нашёл по этой проблеме stackoverflow.com



Исправлено 1 раз(а). Последнее : kornienko_ru, 07.11.24 11:42
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
alex;

Сообщений: 3402
Откуда: Москва
Дата регистрации: 23.11.2004
kornienko_ru
alex;
а есть способ из визуального класса (файлы с расширениями vct и vcx) сделать текстовую библиотеку с расширением prg. Ну или извлечь какой-то класс в prg?
PS
Вот, что я нашёл по этой проблеме stackoverflow.com

Да, для маленьких классов class browser подойдет. Но он кривоват. Из того что я помню,
у него порядок свойств непонятный, начало окончание классов объектов вложенных непонятное, он не прописывает значение базовый класс для ActiveX объектов на форме.
У Пивы был свой метод портирования кода, но мне он не рассказал как.
Да, думаю разбор полей файлов vct и vcx поможет. Надо тока правильно подойти к вопросу.
Попозже спрошу какой-нидь ИИ.

Еще у базового визуального класса, по-моему есть метод SaveAs в рантайме, но он вроде как в class browser. Не помню.

Сходу могу сказать, есть поле Parent.
Для сортировки вывода можно использовать его и Top,Left из поля Properties и/или свойство TabIndex по выбору пользователя.



Исправлено 3 раз(а). Последнее : alex;, 07.11.24 12:50
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
alex;

Сообщений: 3402
Откуда: Москва
Дата регистрации: 23.11.2004
Что мне сразу поиском выпало
AVCXCLASSES(), AMEMBERS(), AGETCLASS(), ACLASS()
Ratings: 0 negative/1 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
ssa

Сообщений: 13085
Откуда: Москва
Дата регистрации: 23.03.2005
kornienko_ru
alex;
а есть способ из визуального класса (файлы с расширениями vct и vcx) сделать текстовую библиотеку с расширением prg. Ну или извлечь какой-то класс в prg?
PS
Вот, что я нашёл по этой проблеме stackoverflow.com
1. На гитхабе взять последнюю версию ClassBrowserX.
2. Изучить встроенную документацию по комбинациям клавиш для получения нужного вывода сего тула.
3. Запустить, натравить на нужное, нажать нужную комбинацию клавиш.
4. Наслаждаться полученным невизуальным кодом визуального нужного.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
alex;

Сообщений: 3402
Откуда: Москва
Дата регистрации: 23.11.2004
kornienko_ru
alex;
а есть способ из визуального класса (файлы с расширениями vct и vcx) сделать текстовую библиотеку с расширением prg. Ну или извлечь какой-то класс в prg?
PS
Вот, что я нашёл по этой проблеме stackoverflow.com

Во, нашел.
Может подойдет.
Листинг из PEM_Editor.
[attachment 37007 Screenshot2024-11-21115119.jpg]
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
lemenev

Сообщений: 229
Дата регистрации: 23.06.2022
Есть ещё foxbin2prg.exe
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
ssa

Сообщений: 13085
Откуда: Москва
Дата регистрации: 23.03.2005
lemenev
Есть ещё foxbin2prg.exe
Ни фига. Он создает хоть и похожий на рабочий, но таки не рабочий код. Рабочий код создает ClassBrowserX, особенно обновленная версия с GitHub. Там только надо внимательно доку почитать по поводу комбинаций клавиш для получения разных способов формирования кода.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
lemenev

Сообщений: 229
Дата регистрации: 23.06.2022
ssa
Рабочий код создает ClassBrowserX, особенно обновленная версия с GitHub

Я скачал ClassBrowserX, установил, разобрался с кнопками запуска. Протестировал на своём примере. Получил файлы All_0.prg, All_1.prg, … All_5.prg. Цифра соответствует коду комбинации клавиш.
У меня на форме есть pageframe с 4 страницами, и на каждой странице есть grid.
Так вот, при попытке запустить получившиеся prg (номера с 2 до 5), либо на первой странице pageframe grid вообще не отображается (на остальных всё в порядке), либо не находится ни один grid в методе resize формы.
Что я делаю не так?


Прикрепляю архив со всеми данными.
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
of63
Автор

Сообщений: 26001
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
А что вы хотите-то посмотреть в этих "DBF" (исконные фоксисты 80-х все попытались свести к DBF-формату... кстати, жалко, что эксель его выключил из чтения, записи уже давно) файлах ?
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
alex;

Сообщений: 3402
Откуда: Москва
Дата регистрации: 23.11.2004
Будущее уже здесь.
Deepseek и Copilot перевели на C# за две минуты.


Результат
00000000: 50 4B 03 04 14 00 02 00|08 00 5B BB 3E 5A E1 F2 | PK   [»>Zбт
00000010: 06 95 05 00 00 00 05 00|00 00 07 00 00 00 71 77 | •   qw
00000020: 65 2E 74 78 74 2B 2C 04|02 00 50 4B 01 02 14 00 | e.txt+, PK
00000030: 14 00 02 00 08 00 5B BB|3E 5A E1 F2 06 95 05 00 |    [»>Zбт•
00000040: 00 00 05 00 00 00 07 00|00 00 00 00 00 00 01 00 |   
00000050: 20 00 00 00 00 00 00 00|71 77 65 2E 74 78 74 50 | qwe.txtP
00000060: 4B 05 06 00 00 00 00 01|00 01 00 35 00 00 00 2A | K   5 *
00000070: 00 00 00 00 00 |



[i]Исправлено 1 раз(а). Последнее : alex;, 30.01.25 23:54
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
of63
Автор

Сообщений: 26001
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Алекс, ты далеко ушел в "современные" технологии, но ты нифига не сделаешь, когда ИИ, интернет, комп сломаются похоже... ка сынок тоже, он думает, что дело за какими-то программами, которые все делают. А дело - за форматами данных, сигналов, за физикой происходящего. В ИИ - с математики процесса, с электроники - с электронного ключа (лампы/транзистора)...

Ну, если тебе нравится ИИ от дипсика, ну, продолжай, только не ссылками на, что-то сам пиши ) или хоть ссылки комментируй текстом. Текст пишешь без ошибок, молоток! )

Доб. Ты привел серию ссылок, но хоть что-то, хоть к одной ссылке, что-то скажи, по-русски



Исправлено 1 раз(а). Последнее : of63, 31.01.25 00:20
Ratings: 0 negative/0 positive
Re: * Функция для чтения файла и вывода его содержимого в шестнадцатеричном формате
alextash

Сообщений: 2288
Откуда: НСК
Дата регистрации: 03.05.2006
of63
Алекс, ты далеко ушел в "современные" технологии, но ты нифига не сделаешь, когда ИИ, интернет, комп сломаются похоже... ка сынок тоже, он думает, что дело за какими-то программами, которые все делают. А дело - за форматами данных, сигналов, за физикой происходящего. В ИИ - с математики процесса, с электроники - с электронного ключа (лампы/транзистора)...
Ну, если тебе нравится ИИ от дипсика, ну, продолжай, только не ссылками на, что-то сам пиши ) или хоть ссылки комментируй текстом. Текст пишешь без ошибок, молоток! )

Доб. Ты привел серию ссылок, но хоть что-то, хоть к одной ссылке, что-то скажи, по-русски

- Внучок возьми вот скриптов домой
- Деда, да у нас этих скриптов много
- Так их все нейросети сгенерировали, а дед сам писал.
Ratings: 0 negative/1 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 32 (Гостей: 32)

© 2000-2025 Fox Club 
Яндекс.Метрика