Найти - Пользователи
Полная версия: Нужна подсказка!
Начало » Центр помощи » Нужна подсказка!
1 2
RatiborMur
Есть *.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
Считать 1 строку, методом строки split разделить ее на элементы, привести полученные строки к численному типу.
За подсказку сойдет?
RatiborMur
Да, спасибо. Как раз начал читать про этот метод. Это позволит заполнить настройки карты, а вот как вытащить все параметры отклонения по оси Z (Map.zmatrix), тоже для меня загадка.
RatiborMur
Частично проверил, вроде получилось. Мб усложняю, но как могу. Всплыл косяк с переводом в 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
RatiborMur
Всплыл косяк с переводом в Float
Я бы советовал сразу поменять разделитель в локали ОС на всех машинах где будет работать ПО а не городить огород с заменами.
Практически любое ПО для обработки данных требует точек как разделителей. автозамена запятых искажает данные, например как вы будете читать таблицу в которой разделители полей запятые?

Поэтому думаю в требованиях к исходным данным надо сразу сказать - запятые во float недопустимы. Их надо не допускать при экспорте данных а не убирать при импорте.
RatiborMur
Как я понимаю файл создан/заполнен был через 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
RatiborMur
В полном тупике
Мы тоже. В ваших постах нет данных о формате записи в файл. Откуда нам знать что и в каком порядке там записано.

А почему вы из паскаля не записываете данные в нормальном общепринятом формате (hdf5, protobuf, json)?
RatiborMur
Потому, что задание :

На языке python (для Windows) версии 3 и выше сделать обработку предлагаемого двоичного файла, в котором содержится заголовок и двоичные данные в формате, согласно приложению 1. Обработанные данные вывести средствами python на 3D график (surface chart). Данные содержат отклонения от горизонтали поверхности в мм (примеры значений: 0..100мм, обычно 7-25мм). В итоге должен получится скрипт Python в параметрах которому можно передать имя файла и он выведет график.

Приложение 1 - первый пост.
+ привязаны файлы, подобные файлу, прикрепленному так же в 1 посте.
doza_and
RatiborMur
Потому, что задание :
Знаем мы таких задавателей. Ничего не понимают а техническое задание берутся писать.
Формат входных данных не описан. Шлите задавателя думать над заданием.
RatiborMur
Рука лицо… А, вариант, что не могу я слать задавателей не рассматривали?!
+ в целом же принцип заполнение файла данными указан, первая строка сформирована из настроек карты, что я достал, а массив отклонения по оси Z заполнен функцией WriteBlock().
А, если даже чтот и требовать, то надо понимать что. Можете хотя бы линк на инфу подобную скинуть или любой похожий вариант, но с известным форматом данных?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB