Форум сайта python.su
Есть *.dat файл, в котором содержится заголовок и двоичные данные в формате:
str:=inttostr(Map.xlen)+'|'+ //размер карты по ширине inttostr(Map.ylen)+'|'+ //размер карты по длине floattostr(Map.stepx)+'|'+ //масштаб карты по ширине floattostr(Map.stepy)+'|'+ //масштаб карты по длине inttostr(Map.startx)+'|'+ //начало данных на карте по ширине inttostr(Map.starty)+'|'+ //начало данных на карте по длине inttostr(Map.lastx)+'|'+ //конец данных на карте по ширине inttostr(Map.lasty)+'|'+ // конец данных на карте по длине inttostr(Map.width)+'|'+ //количество точек по ширине inttostr(Map.height)+'|'+//количество точек по длине floattostr(Map.level)+'|';//базовый уровень Writeln(F, str); str:=inttostr(len); Writeln(F, str);//длина заголовка // Map contains single values for i:=Map.starty to Map.lasty do BlockWrite(FT, Map.zmatrix[i][Map.startx], Map.width, bytes);
Отредактировано RatiborMur (Апрель 22, 2018 19:30:39)
Прикреплённый файлы: 63417_2_28.03_39_39.dat (438,3 KБ)
Офлайн
Считать 1 строку, методом строки split разделить ее на элементы, привести полученные строки к численному типу.
За подсказку сойдет?
Офлайн
Да, спасибо. Как раз начал читать про этот метод. Это позволит заполнить настройки карты, а вот как вытащить все параметры отклонения по оси Z (Map.zmatrix), тоже для меня загадка.
Офлайн
Частично проверил, вроде получилось. Мб усложняю, но как могу. Всплыл косяк с переводом в Float, пришлось менять “,” на “.”, иначе ошибку выдавало.
import re inputfile = '58637-1-102.00_00_01.dat' fn = open (inputfile,mode='r',encoding='latin_1') for num, line in enumerate(fn): if num<1: s=line.split('|') print (s) fn.close() xlen=s[0] ylen=s[1] stepx=s[2] stepy=s[3] print(xlen) print(ylen) print(stepx) print(stepy) result = re.sub(r',', '.', stepx) print(result) print(int(xlen)+float(result))
Офлайн
RatiborMurЯ бы советовал сразу поменять разделитель в локали ОС на всех машинах где будет работать ПО а не городить огород с заменами.
Всплыл косяк с переводом в Float
Отредактировано doza_and (Апрель 17, 2018 06:53:18)
Офлайн
Как я понимаю файл создан/заполнен был через Delphi, но в справочниках формат записи BlockWrite() , не соответствует немного данному:
// Map contains single values for i:=Map.starty to Map.lasty do BlockWrite(FT, Map.zmatrix[i][Map.startx], bytes);
Отредактировано RatiborMur (Апрель 22, 2018 13:00:24)
Офлайн
RatiborMurМы тоже. В ваших постах нет данных о формате записи в файл. Откуда нам знать что и в каком порядке там записано.
В полном тупике
Офлайн
Потому, что задание :
На языке python (для Windows) версии 3 и выше сделать обработку предлагаемого двоичного файла, в котором содержится заголовок и двоичные данные в формате, согласно приложению 1. Обработанные данные вывести средствами python на 3D график (surface chart). Данные содержат отклонения от горизонтали поверхности в мм (примеры значений: 0..100мм, обычно 7-25мм). В итоге должен получится скрипт Python в параметрах которому можно передать имя файла и он выведет график.
Приложение 1 - первый пост.
+ привязаны файлы, подобные файлу, прикрепленному так же в 1 посте.
Отредактировано RatiborMur (Апрель 22, 2018 13:45:00)
Офлайн
RatiborMurЗнаем мы таких задавателей. Ничего не понимают а техническое задание берутся писать.
Потому, что задание :
Отредактировано doza_and (Апрель 22, 2018 16:52:40)
Офлайн
Рука лицо… А, вариант, что не могу я слать задавателей не рассматривали?!
+ в целом же принцип заполнение файла данными указан, первая строка сформирована из настроек карты, что я достал, а массив отклонения по оси Z заполнен функцией WriteBlock().
А, если даже чтот и требовать, то надо понимать что. Можете хотя бы линк на инфу подобную скинуть или любой похожий вариант, но с известным форматом данных?
Отредактировано RatiborMur (Апрель 22, 2018 17:42:30)
Офлайн