Добрый день, уважаемые форумчане!
Я - радиоинженер. Серьёзным программированием я не занимался, но на работе была поставлена глобальная задача, для выполнения которой я решил воспользоваться C++ Builder. Кое- какие навыки имеются, но понимаю, что знаний не достаточно.
Я глобальную задачу разбил на несколько локальных.
1. Имеем текстовый файл, данные из которого мне нужны строки с 18 по 19617.
Данные из этих представлены в виде чисел, разделенных пробелами.
Пример:
Код
16.2 20.4 -2.9096490 0 -21.570751 0
16.4 20.4 -7.0444910 0 -22.913940 0
16.6 20.4 -11.642429 0 -24.382340 0
16.8 20.4 -10.577831 0 -23.916622 0
2. Нужно каждый элемент строки вывести в отдельное поле. Для наглядности, мы видим на примере, что каждый столбец должен быть отображен в своём поле вывода (Memo или Edit). В моём случае -это Memo (Memo1...Memo6).
3. После того, как я разбил строки на элементы (в качестве разделителя выступал пробел) и ввел каждый столбец в своё поле Memo (получилось шесть столбцов), нужно стало из каждого поля Memo сделать массивы для последующего построения графиков. Т.е. должны получить шесть массивов.
4. Из получившихся шести массивов нужно построить графики. Первый график - массив1 и массив2; второй график - массив3 и массив 5.
Я самостоятельно пытаюсь разобраться в этой проблеме, просматривал множество тем на разных форумах и написал небольшую программу, она работает, но очень плохо. И выполняется только два первых пункта.
Листинг программы
//---------------------------------------------------------------------------
#include
#include
#include
#include
#pragma hdrstop
#include "SortDataBase3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
ListBox1->Items->Clear();
ListBox1->Items->LoadFromFile("C:/am44/ST1_RX_H_10950.mat");
}
void ParseString (TStringList *List, AnsiString Src, char Delimiter)
{
List->Clear();
while (1)
{
Src = Src.Trim();
if(!Src.Length()) break;
int Index = Src.AnsiPos(Delimiter);
if(!Index) {List->Add(Src); break; }
List->Add(Src.SubString(1,Index - 1).Trim());
Src.Delete(1,Index);
}
};
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListBox1->Items->Clear();
ListBox1->Items->LoadFromFile("C:/am44/ST1_RX_H_10950.mat");
int Index=ListBox1->ItemIndex;
for (Index = 18; Index 961; Index++) {
//if (Index>=17)
//{
TStringList *List=new TStringList();
ParseString(List, ListBox1->Items->Strings[Index], ' ');
Memo1->Text=(List->Count>0)?Memo1->Text+" "+List->Strings[0]:(String)""; // если элемент существует, кладём в первый Эдит
Memo2->Text=(List->Count>1)?Memo2->Text+" "+List->Strings[1]:(String)""; // если элемент существует, кладём во второй Эдит
Memo3->Text=(List->Count>2)?Memo3->Text+" "+List->Strings[2]:(String)""; // если элемент существует, кладём в третий Эдит
Memo4->Text=(List->Count>3)?Memo4->Text+" "+List->Strings[3]:(String)""; // если элемент существует, кладём в четвертый Эдит
Memo5->Text=(List->Count>4)?Memo5->Text+" "+List->Strings[4]:(String)""; // если элемент существует, кладём в пятый Эдит
Memo6->Text=(List->Count>5)?Memo6->Text+" "+List->Strings[5]:(String)""; // если элемент существует, кладём в шестой Эдит
delete List;
}
}
//---------------------------------------------------------------------------
К сожалению, я не смог вставить свою форму, но, вкратце опишу: Поле ListBox, в которое выводится файл; шесть полей Memo, в которые выводятся элементы строк (столбцы); кнопка исполнения программы.
Дорогие форумчане! Я ЗАРАНЕЕ БЛАГОДАРЕН ВСЕМ, кто захочет помочь разобраться мне в этой проблеме и, если вам будет не трудно, то укажите на мои ошибки в программе и сделайте подробный комментарий. Очень буду рад помощи в выполнении пунктов 3 и 4 с подробнейшим разбором кода. Это важно, прежде всего, для меня, потому что очень важно освоить такой интересный язык программирования, как Билдер.