Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Kabanets2005

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
//вызов формы Form2 по нажатию кнопки
void __fastcall TForm2::Button1Click(TObject *Sender)
{    
//на форме размещён компонент StringGrid, в который будут заносится данные из файлов.
        Form1->StringGrid1->ColCount=FileListBox1->Count+1; //добавление ещё одного  
                                                                                           //    столбца к таблице
 
        char Wavelength[6], Intensity[20]; // переменные, в которые заносятся значения длин  
 
                                                           //волн и интенсивностей (из файлов)
 
        AnsiString FileName, old_str=".", new_str=",", Wavelength_1, Intensity_1; //переменные
        char *file_head=">>>>>Begin Spectral Data<<<<<\0";//строка, кот. ищем в файле
        char *check_line="";// сюда читаем строку из файла
        int head_pos, row_number, num_of_file;
 
/*head_pos - положение конца строки file_head в файле
row_number - номер строки в таблице StringGrid
num_of_file - номер файла в списке FileListBox, который читается*/
 
//----------------------Заполнение заголовков столбцов таблицы StringGrid----------------------
 
        for (row_number=1; row_number<FileListBox1->Count+1; row_number++)
                Form1->StringGrid1->Cells[row_number][0]=row_number-1;
//------------------------------------------------------------------------------
         
        if (FileListBox1->Count>0)  //условия наличия хотя бы одного файла в списке
        {
               //открываем файлы по порядку и заносим данные в таблицу
                for (num_of_file=0; num_of_file<=FileListBox1->Count; num_of_file++)
                {
                        FileListBox1->ItemIndex=num_of_file;
                        FileName=FileListBox1->FileName;
                         
                        ifstream FILE;
                        FILE.open(FileName.c_str());
                        if (FILE!=NULL)
                        {
 
//Чтение первого файла. Находится положение конца заголовка в файле, а далее  
//                             заполняется нулевой столбец таблицы
 
                                if (num_of_file==0)
                                {
                                        while (strcmp(check_line, file_head)!=0) //поиск конца заголовка
                                        FILE.getline(check_line, 1000);               //путём сравнения строки
                                                                                                   //из файла с эталоном
                                        head_pos=FILE.tellg();   //запоминаем текущую позицию в файле
                                        row_number=1;
 
                              //таблицу заполняем, перепрыгивая через нулевую строку
                                        while (row_number<=2048) //2048 - число значений в столбце
                                        {
                                                FILE>>Wavelength>>Intensity; /*из каждой строки файла
                                               извлекаются два значения и записываются в переменные*/
                                                Wavelength_1=StringReplace(AnsiString(Wavelength), old_str, new_str, TReplaceFlags()<<rfReplaceAll); //меняем точки на запятые
                                                Intensity_1=StringReplace(AnsiString(Intensity), old_str, new_str, TReplaceFlags()<<rfReplaceAll); //меняем точки на запятые
 
                                               //заносим данные в таблицу
                                                Form1->StringGrid1->Cells[0][row_number]=Wavelength_1;
                                                Form1->StringGrid1->Cells[1][row_number]=Intensity_1;
                                                row_number++;
                                        }
                                }
 
//-----------------------заполнение остальной таблицы---------------------------
                                FILE.seekg(head_pos); //перепрыгиваем через заголовок файла
                                row_number=1;          //и через нулевую строку таблицы
 
                                //остальное - как и для первого файла
 
                                while (row_number<=2048)
                                {
                                 FILE>>Wavelength>>Intensity;
                                 Intensity_1=StringReplace(AnsiString(Intensity), old_str, new_str, TReplaceFlags()<<rfReplaceAll);
                                 //в таблицу заносятся только значения из вторых столбцов файлов                      
                                 Form1->StringGrid1->Cells[num_of_file+1][row_number]=Intensity_1;
                                 row_number++;
                                 }
                        FILE.close();
                        }
                }
        }
        Form2->Close();
        Form1->SetFocus();
 
}
//Проверял пошагово каждую переменную. Заметил, что текст из переменной check_line сохраняется и потом при использовании других строковых переменных - он переходит в них. Даже тупое обнуление этих переменных не помогает. Часть текста всё равно остаётся может, это и есть причина всех проблем? только понять не могу, что не так.
При повторном вызове этой процедуры (без перезагрузки программы) первые два значения двух столбцов таблицы заполняются разорванным на части текстом из check_line. Остальные значения в таблице даже не трогаются. Файлы уже не читаются (в смысле, нет захода в файлы вообще)

Всего записей: 16 | Зарегистр. 21-09-2006 | Отправлено: 22:36 04-10-2006
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru