Теперь, когда я довольно хорошо знаком с Python, решил изучать C ++, поэтому я очень n00b, но уверен, что готов учиться.Я сделал скрипт для чтения из очень строго заданного формата файла (.EDF, для медицинских сигналов), с заголовком ascii, определяемым размерами полей в байтах.Итак, я прочитал 8 байтов для первого поля, 80 байтов для второго поля и т. Д.
Мой рабочий скрипт на Python выглядит следующим образом:
## HEADER FIELD NAMES AND SIZES FROM EDF SPEC:
header_fields = (
('version', 8), ('patinfo', 80), ('recinfo', 80),
('start date', 8), ('start time', 8), ('header bytes', 8),
('reserved', 44), ('nrecs', 8), ('recduration', 8),
('nchannels', 4))
## TELL WHICH FILE TO OPEN
folder = os.path.expanduser('~/Dropbox/01MIOTEC/06APNÉIA/Samples')
f = open(folder + '/Osas2002plusQRS.rec', 'rb')
# READ FILE CONTENT TO DICTIONARY OF LABELLED FIELD CONTENTS,
# ALREADY STRIPPED FROM BLANK SPACES
header = {}
for key, value in header_fields:
header[key] = f.read(value).strip()
Конечный результат равен 'header ', словарь, в котором каждая пара является «помеченной» строкой.
Мой текущий неуклюжий код на C ++, который почти работает для печати без разметки строк, выглядит так:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
static int header_bytes[] = {8,80,80,80,80,8,8,8,44,8,8,4};
static int header_bytes_len = sizeof(header_bytes)/sizeof(int);
static string header_fields[] =
{
"version",
"patinfo",
"recinfo",
"patinfo",
"recifo",
"start date",
"start time",
"header bytes",
"reserved",
"nrecs",
"rec duration",
"nchannels"
};
int main()
{
ifstream edfreader;
edfreader.open("/home/helton/Dropbox/01MIOTEC/06APNÉIA/Samples/Osas2002plusQRS.rec", ios::binary);
char * buffer = new char [80];
for (int n = 0; n<header_bytes_len; n++)
{
edfreader.read(buffer, header_bytes[n]);
buffer[header_bytes[n]] = '\0';
cout<<"'"<<buffer<<"'"<<endl;
}
return 0;
}
На самом делеЯ скопировал и вставил последнюю часть main () из записи форума cplusplus.com, просто для того, чтобы получить какой-то вывод, но на самом деле я хотел сохранить поля как массив строковых объектов или, что еще лучше, массивуказателей на строковые объекты.Я читаю "C ++ Primer", но все еще на 200+ страницах, но я очень хочу немного поиграться с кодом на C ++, поэтому, если кто-нибудь сможет указать мне на некоторые методы, концепции или чтения, я буду очень счастлив.
Спасибо за чтение