Название: Нарисовать график по данным из файла Отправлено: test0 от Декабрь 09, 2011, 15:18 Доброго времени суток!
Прошу помощи в освоении Qt и в частности решения одной задачи: Необходимо написать программу, которая позволяла бы пользователю выбирать файл для обработки, а потом на основании данных из этого файла строить график. - Сам файл это CSV, правда большой (более 100000 строк) - Значение надо получить из строки, потом конвертнуть из HEX в DEC. Потом его можно использовать. - Построить график (по оси У: значение из файла, по оси Х: номер строки). У меня Qt установлена на Ubuntu. Версия Qt как я понимаю последняя. Собственно я пытался это реализовать другими средствами, а потом узнал о Qt и мне понравилось. Начал же я с обработки строк файла и создания регулярного выражения. Сейчас я его уже проверил и файл можно разбирать как обычный текстовой. Но с чего начать и как лучше не знаю. Прошу направить на верный путь! Собственно последовательность действий я вижу такую: 1) Открываем файл 2) Обрабатываем построчно 3) Данные записываем в массив 4) Создаем график 5) Выводим данные из массива п.с. Работать программе предстоит в винде, поэтому возможно надо поставить Qt под винду? Название: Re: Нарисовать график по данным из файла Отправлено: madRoger от Декабрь 09, 2011, 15:36 Последовательность действий верна, а для работы с графиками подойдет qwt
Название: Re: Нарисовать график по данным из файла Отправлено: test0 от Декабрь 09, 2011, 21:17 Спасибо за наводку на qwt!
А по остальным частям задачки можете посоветовать? Просто с нуля разбираюсь) Особые сложности могут быть при выводе данных из массива на график... не будет ли тормозить, например, при выводе более 100К значений за раз или надо порциями? Название: Re: Нарисовать график по данным из файла Отправлено: madRoger от Декабрь 09, 2011, 21:56 Тормоза конечно будут, но не при выводе на график, а при чтении массива из файла и его разборе.
График из 100К значений представляется просто пятном на экране. Если разрешение монитора по горизонтали 1024, то на графике будет примерно 100 значений на 1 пиксель. Вряд ли получится что-то рассмотреть. Можно брать среднее с каждых 10 значений, тогда получится график из 1000 значений, это думаю подойдет, или другие варианты. Выводить можно полностью, но будет задержка, можно порциями, но это немного сложнее в плане программирования. Тут все зависит от задачи. Можно выводить полностью и во время обсчета массива показывать прогрессбар с процессом загрузки. Название: Re: Нарисовать график по данным из файла Отправлено: test0 от Декабрь 10, 2011, 00:47 Вот нашёл код по разбору файла построчно:
Код: #include <QFile> А как сделать обработку читаемой строки по регулярке и преобразованием из hex в dec перед тем как его запоминать? Или я не в ту степь двигаюсь? И как я понял в данном случае код не запоминает строки в массив, а как это правильно сделать? Регулярное выражение у меня такое вышло: /(\w{2}).{4}\$/ А примерные строки из файла: "-1296418983,27","0x0005C906" "-1296418983,27","0x000571F1" "-1296418983,27","0x00050042" "-1296418983,27","0x0005229D" "-1296418983,27","0x00058101" "-1296418983,27","0x00053FE3" "-1296418983,27","0x000533B1" "-1296418983,27","0x00056AD2" "-1296418983,27","0x00050759" ... и т.д. Название: Re: Нарисовать график по данным из файла Отправлено: kuzulis от Декабрь 10, 2011, 11:00 Цитировать А как сделать обработку читаемой строки по регулярке и преобразованием из hex в dec перед тем как его запоминать? Или я не в ту степь двигаюсь? см. в сторону методов типа QString::toXXX()Да и зачем регулярка в этом случае? Можно просто делать что-то типа: Код
Как то так. Не уверен в производительности этого метода. Но это при условии что в тех строках что ты привел нет символов " (кавычек). Если есть кавычки, можно попробовать сдеать типа: Код
Попробуй, может получится. ЗЫ: А, не, не получится split(), т.к. у тебя куча запятых в строке. Надо было структуру файла нормально придумывать, чтобы если разделитель - то уникальный, например ';' Название: Re: Нарисовать график по данным из файла Отправлено: kambala от Декабрь 10, 2011, 13:30 ну так разделять по "\",\"" и потом у полученных строк удалять кавычки или вырезать только строку-число для конвертации. но да, лучше конечно, чтоб разделитель элементов и целой/дробной части не совпадали.
Название: Re: Нарисовать график по данным из файла Отправлено: madRoger от Декабрь 10, 2011, 15:37 При такой структуре данных можно такой вариант попробовать:
Код: QString line = исходная строка; Название: Re: Нарисовать график по данным из файла Отправлено: test0 от Декабрь 12, 2011, 18:36 Спасибо за советы, попробую!
А структура файла такая, потому что ее такой делает прибор, изменять который увы нельзя) |