bool newLine = true; // перешли ли на новую строку при парсинге файла
char symbol; // считываемый символ из файла
char categories[10][200]; // категории
char titles[10][200]; // хранит список универов в категории
unsigned int countCategories = 0; // кол-во категорий
// При создании формы следющая функция:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
FILE * pFile;
pFile = fopen ("universities.txt","r");
if(pFile==NULL) {
Application->MessageBoxA("Error opening file","0_0");
return;
}
char string[256];
unsigned char i = 0;
while(!feof(pFile)) {
symbol = fgetc(pFile);
if( symbol == 0x0A ) {
string = '\0';
strcpy(titles[countCategories],string);
newLine = true;
i = 0;
continue;
}
if( symbol == ' ' && newLine ) {
string = '\0';
strcpy(categories[countCategories],string);
newLine = false;
countCategories++;
i = 0;
} else {
string = symbol;
i++;
}
}
for(i = 0; i < countCategories; i++) {
Form1->category_select->Items->Add(categories);
}
fclose (pFile);
}
// Функция, которая выводит вузы, тут и ошибка
void __fastcall TForm1::category_selectChange(TObject *Sender)
{
int cat = Form1->category_select->ItemIndex;
char string[256];
if( cat == -1 ) { Application->MessageBoxA("Выбери категорию, демон!!!","0_0"); return; }
Form1->list_items->Items->Clear();
int i = 0;
while(true) {
if( titles[cat] == ' ' ) {
string = '\0';
Form1->list_items->Items->Add(string);
i = 0;
} else {
string = titles[cat];
i++;
}
if( titles[cat] == '\0' || i == 20 ) break; // чую здесь проблема
}
}
С++; работа с данными из файла
Цитата:
Дан список вузов страны с разбивкой по профилям (файл люой структуры). Количества профилей и вузов каждого профиля задать самостоятельно. Составить модуль формирования нового списка вузов заданного профиля, являющихся университетами.
XML использовать нельзя, к сожалению(( Проблема в том, чтобы обработать данные, полученные из файла.
Допустим, из файла считывается некоторая информация, например такая:
Цитата:
Медецинский 1ОМГУ ПГУ ТОГиНУ 1МИРП МикРат ЭлТэ
Технический 1ТГУ 1ТУСУР 1ТГАСУ ТУГИСУ ОЦАЦУ 1ОМПУЦА
Правоведение 1АНАГИ 1ОМГ МАИ МИА ТГНУ ТюмГУ
Психологический МПСИ 1ПУ-4 ИАнЧ КИбОМ 1ЕГУ ЮМГУ
где первое слово - профиль, далее через пробел идут ВУЗы, если первый символ в имени - '1', значит это университет. Проблема стоит в обработке данных.
Создаю приложение в Borland C++ Builder. В нём имеем один ComboBox, в котором храним выбранные категории и ListBox, в который параметры заносятся при выборе очередного профиля из ComboBox. Т.е. вешаю событие OnChange в ComboBox функцию, которая выводит список вузов данного профиля. Написал следующий код, проблема при выводе данных в ComboBox, то виснет, то ещё че-то.
Код:
Если можно, то укажите где ошибка, ну и просто общие советы, как это дело лучше организовать (так как С++ знаю поверхностно, в общем)
Код:
void __fastcall TForm1::category_selectChange(TObject *Sender) {
int cat = Form1->category_select->ItemIndex;
char string[256];
if ( cat == -1 ) { Application->MessageBoxA("Выбери категорию, демон!!!","0_0"); return; }
Form1->list_items->Items->Clear();
int i = 0;
int j=0;
while (true) {
if ( titles[cat][j] == ' ' ) { // !!!
string = '\0';
Form1->list_items->Items->Add(string);
i = 0;
}
else {
string = titles[cat][j]; // !!!
i++;
}
if ( titles[cat][j] == '\0' ) break; // !!!
j++;
}
}
int cat = Form1->category_select->ItemIndex;
char string[256];
if ( cat == -1 ) { Application->MessageBoxA("Выбери категорию, демон!!!","0_0"); return; }
Form1->list_items->Items->Clear();
int i = 0;
int j=0;
while (true) {
if ( titles[cat][j] == ' ' ) { // !!!
string = '\0';
Form1->list_items->Items->Add(string);
i = 0;
}
else {
string = titles[cat][j]; // !!!
i++;
}
if ( titles[cat][j] == '\0' ) break; // !!!
j++;
}
}
Спс, тему можно закрыть