| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > обработка данных в Borland C++ Builder |
| Автор: AFenix85 20.4.2007, 11:05 |
| Мне надо из file.dat считать данные в программе.Помогите кто может. Файл представляет из себя таблицу,без линий(надеюсь понятно),нужно считать определенный столбец! |
| Автор: Rodman 20.4.2007, 11:12 |
| работать с файлом можно при помощи TStringList... но что ты имеешь ввиду под "столбцом"... Покажи структура файла... |
| Автор: Anikmar 20.4.2007, 11:18 |
Для меня было бы больше непонятно "Файл представляет собой таблицу с линиями" Присоединяюсь к Rodman : структуру файла в студию! |
| Автор: AFenix85 20.4.2007, 11:20 |
| Это кусок! tm55 tm60 tm65 tm70 tm75 tm80 tm85 tm90 vx55 4.211 4.211 4.218 4.211 4.211 4.211 4.224 4.211 -58.5 4.224 4.229 4.224 4.218 4.218 4.218 4.229 4.218 -57 4.229 4.236 4.229 4.224 4.224 4.224 4.242 4.224 -56.6 4.236 4.242 4.236 4.229 4.229 4.229 4.311 4.229 -56.4 4.242 4.248 4.242 4.236 4.236 4.236 4.324 4.236 -56.4 4.248 4.254 4.248 4.242 4.242 4.242 4.636 4.242 -56.6 4.254 4.561 4.561 4.248 4.248 4.248 4.661 4.248 -56.9 4.592 4.568 4.579 4.254 4.254 4.254 4.961 4.254 -57.3 4.611 4.574 4.611 4.311 4.311 4.311 5.161 4.311 -57.8 4.617 4.579 4.617 4.318 4.318 4.318 5.174 4.318 -58.4 4.624 4.586 4.624 4.324 4.324 4.324 5.561 4.324 -59.3 4.629 4.592 4.629 4.329 4.329 4.329 5.674 4.329 -60.3 4.636 4.611 4.636 4.336 4.336 4.336 5.879 4.336 -61.5 4.642 4.617 4.642 4.468 4.342 4.342 5.886 4.342 -62.8 4.661 4.624 4.661 4.474 4.348 4.411 5.924 4.348 -64.2 4.668 4.629 4.724 4.479 4.411 4.418 6.117 4.411 -65.6 4.674 4.636 4.879 4.486 4.418 4.429 6.836 4.418 -67.1 4.679 4.642 4.942 4.492 4.424 4.461 ****** 4.424 -68.5 4.911 4.661 4.961 4.561 4.442 4.486 ****** 4.429 -69.8 4.918 4.668 4.968 4.568 4.461 4.492 ****** 4.442 -71.2 4.924 4.824 5.068 4.574 4.468 4.561 ****** 4.461 -72.4 Как например считать tm75.То есть выбрать этот столбец и считать его! |
| Автор: Rodman 20.4.2007, 11:32 |
| Ну тебе надо найти каким по счету идет tm75, а потом отсчитывать в каждой строке... учет пробелов нужен... |
| Автор: AFenix85 20.4.2007, 11:42 |
| А как это сделать?Прочел много, а результата нет!Книги на этом форуме качал! Если можно,то помогите примерами пожалуйста |
| Автор: Pendalf 20.4.2007, 16:17 | ||
Когда-то товарищ просил нечто подобное. Код писался в блокноте и не компилировался, поэтому могут быть некоторые ошибки.
|
| Автор: AFenix85 20.4.2007, 16:49 |
| Спасибо,Pendalf.за наглядный пример Если я правильно понял,теперь мне надо все это проделать для каждого элемента этого столбца А нельзя как нибудь по проще И еще,кто знает простой способ постройки гистограммы в форме? |
| Автор: Klin 20.4.2007, 17:22 | ||
В принципе можно
Вроде все работает. Это пример получения столбца ( E_Num ) из строки L_Num. Позже если надо, то могу и другие функции обработки написать |
| Автор: AFenix85 21.4.2007, 05:24 | ||
Если не трудно,то напиши пожалуйста!
А можешь написать? |
| Автор: Anikmar 21.4.2007, 07:52 |
Чего написать? Компонент? Я пока даже условия задачи не увидел. Компонент называется TChart. Если набрать его в поиске по форуму - вылезет уйма информации. Я лично с ним никогда не работал - знаю, что он есть, но мне пока не понадобился. |
| Автор: AFenix85 21.4.2007, 09:09 |
| Я тебя не понял! А если там табуляция,то че делать Меня эта задача уже достала,че не пробую,ниче не получается.Либо виснет,либо глючит,либо ниче не происходит |
| Автор: Anikmar 21.4.2007, 11:02 | ||||
Очевидно считать по табуляции. А можно и все сразу. Идем по строчке. Если символ не является разделителем - то считаем, что это значение столбца. Дошли до разделителя - увеличиваем счетчик столбцов и идем по символам пока разделители не кончаться (если их несколько подряд). Дошли опять до рабочего символа - значит начался следующий столбец - ждем пока закончится. Я когда очень давно (не помню зачем) писал функцию, которая возвращает слово из строки по номеру - если найду - скину Добавлено через 3 минуты и 37 секунд Нашел. Правда она на Билдере написана, но логика понятна, изменить ее можно, можно свою написать:
Добавлено через 5 минут и 16 секунд Тьфу. Это же и есть форум по Билдеру - совсем заработался |
| Автор: AFenix85 21.4.2007, 14:26 | ||
Я тоже подумал,но спасибо за пояснение! Большое спасибо за пояснения и примеры всем! |
| Автор: Klin 21.4.2007, 14:40 |
| Код, который я писал ранее, не всегда вывод нужное значение. Вот исходник, с основными функциями: |
| Автор: AFenix85 21.4.2007, 15:00 | ||||
Извиняюсь перед всеми
Мне надо весь столбец считать в массив,для последующей его обработки! Я в С++Builder'e новичек,многого не знаю!
Извини меня за мою тупость,но не мог бы ты обьяснить то, че ты скинул |
| Автор: AFenix85 21.4.2007, 15:29 |
Посмотрел на прогу,но она не запускается,выдает ошибку: [Linker Fatal Error] Fatal: Unable to open file 'DCLUSR.BPI' Че это может поможешь? |
| Автор: Klin 21.4.2007, 15:39 |
| Пересохранил, если не заработает , значит что-то у в настройках у тебя не то. p.s. можешь просто создать свою программу на основе моей. |
| Автор: AFenix85 21.4.2007, 16:11 |
| Ага работает,но че мне делать, если я не знаю че,что делает в проге. Klin. напиши коменты пожалуйста Да,забыл мне надо весь столбец считать в массив,для последующей его обработки! Я в С++Builder'e новичек,многого не знаю!Помого с алгоритмом |
| Автор: Klin 21.4.2007, 16:50 | ||||||||||
Сорри, заработался... Перемменные:
Весомый пост |
| Автор: AFenix85 22.4.2007, 04:55 |
| Балин Как много инфы,ну ни че,будем фильтровать! |
| Автор: AFenix85 22.4.2007, 05:21 |
| klin помоги,че он ругается в написаном сверху? [C++ Warning] Unit1.cpp(77): W8004 'NowY' is assigned a value that is never used [C++ Warning] Unit1.cpp(77): W8004 'NowX' is assigned a value that is never used А кто знает как сделать такую вещь: 1.В папке лежат файлы *.dat 2.*.dat содержат эти самые таблицы 3.На форме в Edit пишем название *.dat, и прога сама открывает файл, какой нужно |
| Автор: Anikmar 22.4.2007, 11:28 |
Воспользуйтесь диалогом TOpenDialog - тогда пользователь еще и сможет выбрать нужный файл из любого места на диске |
| Автор: AFenix85 22.4.2007, 11:42 |
А можно примерчик,а то я не знаю как! |
| Автор: Anikmar 22.4.2007, 13:16 |
Да в общем то - 3 действия 1. Размещаем на форме нужный диалог (палитра Dialogs - там есть разные) 2. Размещаем на форме кнопку "Открыть файл" 3. В обработчике этой кнопки пишем if (OpenDialog1->Execute()) { MyOpenFile(OpenDialog->FileName); } Ну, конечно, это самый элементарный вариант. Посмотрите хелп по диалогу - у него куча настроек, масок и т.п. Можно выбрать несколько файлов, можно создаватьих при отсутствии - в общем очень наглядно, полезно и нужно (для законченности) Писал по памяти - если где очепятка - я не виноват. |
| Автор: AFenix85 22.4.2007, 15:11 |
| Извини Anikmar,я ошибся,мне не надо его непосредственно открывать,а надо считать нужный столбец Просто хочется,чтобы прога все делала сама,и сама искала этот файл на диске,а его имя вводить в Editе! Также в Edite вводить название столбца и прога его нашла и считала в массив для последующей его обработки! Многого не знаю и потому прошу |
| Автор: Klin 22.4.2007, 16:04 | ||||||||
Это означает, что вы не используете эти переменные в своей программе.
Для этого можно так написать:
|
| Автор: GIK 22.4.2007, 16:39 | ||
| Народ, сори что влезу щас не в тему, но для себя я обнаружил новшество, когда решал эту задачу. Оказывается если строка, к примеру имеет длину 21 символ, то при счтитывании с помошью функции getline(); до конца строки ( '\n' ), кол-во счытанных эллементов = длине строки +1, и + конец строки. Имеем мы к примеру файл: FG12 HG23 RT43 9.12 1.23 1.44 1.45 4.67 1.45 1.34 5.67 1.23 Поправте если не прав.
Да кстати, если нужно вбить в массив именно числа, то придется конвертить побитово char символы в числа, с целыми числами это не проблема, разница между символом '1' и числом 1 = 48, а вот с нецелыми придется работать с мантисой. |
| Автор: AFenix85 23.4.2007, 10:24 | ||
Это я понял,а зачем ты их тогда мне написал,путать то зачем,мне итак плохо Напишите пожалуйста код! 1.Из Edit1 считываем, например, tm75 2.В примере моей таблицы,просмотреть 1 строку и найти номер столбца tm75 3.Как написать условие проверки 4.Номер вывести в Memo1 Для меня,новичка,это затруднительно |
| Автор: Klin 23.4.2007, 13:35 | ||
Я то их в коде использовал. Это вы их упустили. Я в своем предудущим посте, написал как это сделать для Edit5 |
| Автор: AFenix85 23.4.2007, 13:48 |
Я имел ввиду,не как вывести,а как сделать проверку.Чтобы прога по циклу переработала 1 строку и нашла нужный столбец по названию! А в эдит вводить что угодно! В вашем посте я не сразу увидел и понял смысл проверки Мне нужен перебор пробелов для последующей обработки файла, напишите пожалуйста! |
| Автор: Klin 23.4.2007, 16:42 | ||||||
А до этого чем занимались?
Ну значит кусками будем выводить :
Заменил... |