RatiborMur
Апрель 15, 2018 18:24:22
Есть *.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);
Как правильно взять параметры из файла, чтоб построить на их основе 3д график?
JOHN_16
Апрель 16, 2018 12:58:03
Считать 1 строку, методом строки split разделить ее на элементы, привести полученные строки к численному типу.
За подсказку сойдет?
RatiborMur
Апрель 16, 2018 18:24:21
Да, спасибо. Как раз начал читать про этот метод. Это позволит заполнить настройки карты, а вот как вытащить все параметры отклонения по оси Z (Map.zmatrix), тоже для меня загадка.
RatiborMur
Апрель 17, 2018 00:03:39
Частично проверил, вроде получилось. Мб усложняю, но как могу. Всплыл косяк с переводом в 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))
Еще б, разобраться с отклонениями по оси Z и вроде можно строить карту поверхности.
doza_and
Апрель 17, 2018 06:51:56
RatiborMur
Всплыл косяк с переводом в Float
Я бы советовал сразу поменять разделитель в локали ОС на всех машинах где будет работать ПО а не городить огород с заменами.
Практически любое ПО для обработки данных требует точек как разделителей. автозамена запятых искажает данные, например как вы будете читать таблицу в которой разделители полей запятые?
Поэтому думаю в требованиях к исходным данным надо сразу сказать - запятые во float недопустимы. Их надо не допускать при экспорте данных а не убирать при импорте.
RatiborMur
Апрель 22, 2018 12:59:40
Как я понимаю файл создан/заполнен был через Delphi, но в справочниках формат записи BlockWrite() , не соответствует немного данному:
// Map contains single values
for i:=Map.starty to Map.lasty do
BlockWrite(FT, Map.zmatrix[i][Map.startx], bytes);
В полном тупике, как обработать массив этих байтов, чтоб выцепить значение отклонения по оси Z.
doza_and
Апрель 22, 2018 13:34:14
RatiborMur
В полном тупике
Мы тоже. В ваших постах нет данных о формате записи в файл. Откуда нам знать что и в каком порядке там записано.
А почему вы из паскаля не записываете данные в нормальном общепринятом формате (hdf5, protobuf, json)?
RatiborMur
Апрель 22, 2018 13:43:01
Потому, что задание :
На языке python (для Windows) версии 3 и выше сделать обработку предлагаемого двоичного файла, в котором содержится заголовок и двоичные данные в формате, согласно приложению 1. Обработанные данные вывести средствами python на 3D график (surface chart). Данные содержат отклонения от горизонтали поверхности в мм (примеры значений: 0..100мм, обычно 7-25мм). В итоге должен получится скрипт Python в параметрах которому можно передать имя файла и он выведет график.
Приложение 1 - первый пост.
+ привязаны файлы, подобные файлу, прикрепленному так же в 1 посте.
doza_and
Апрель 22, 2018 16:52:05
RatiborMur
Потому, что задание :
Знаем мы таких задавателей. Ничего не понимают а техническое задание берутся писать.
Формат входных данных не описан. Шлите задавателя думать над заданием.
RatiborMur
Апрель 22, 2018 17:37:36
Рука лицо… А, вариант, что не могу я слать задавателей не рассматривали?!
+ в целом же принцип заполнение файла данными указан, первая строка сформирована из настроек карты, что я достал, а массив отклонения по оси Z заполнен функцией WriteBlock().
А, если даже чтот и требовать, то надо понимать что. Можете хотя бы линк на инфу подобную скинуть или любой похожий вариант, но с известным форматом данных?