Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 0
Регистрация: 24.03.2010
Сообщений: 11

Заполнение переменных из файла

27.03.2010, 19:34. Показов 1077. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем )
Нужен совет - каким способом проще перенести числовые данные из файла в массив. Файл структуры .csv, то есть строки со значениями, разделенные ";"

Пример файла:
981;2511;3006;3425
10;713;1167;3298
3620;3284;3146;2908
1759;1038;988;3876
3076;1221;670;1425
1640;2133;1643;3354
926;1036;1990;1787

В итоге нужно получить массивы столбцов (должно получится 4 массива). В конце каждой строки символы перевода каретки и конца строки. Числа целые.

PS можно конечно посимвольно обработать, но это как-то не комильфо... да и файл весьма большой.

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2010, 19:34
Ответы с готовыми решениями:

Заполнение строк DBGrid-а из переменных
Скажите пожалуйста, где можно почитать о работе с таблицами DBGrid - заполнение строк из переменных и т.д. И как закрыть вторую форму после...

Чтение имён переменных из файла и раскрытие этих переменных
Допустим есть скрипт "1",в котором описано: set ueqrxbfmfi=t for /f "usebackq tokens=*" %%a in ("test.txt") do set...

Заполнение переменных в ссылке
Привет, пользователи CyberForum! Проблема одна. Хочу сделать ссылку вида:...

4
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
27.03.2010, 22:17
К сожалению у меня установлен 5-ый билдер и в нем у TStringList нет свойства Delimiter, которое задает символ, для разбиения строки на стринги(не трусы).
Так, что пришлось через SubString заполнять массив.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TStringList *Lst = new TStringList;
        Lst->LoadFromFile("C:\\Test.csv");
        int NumberOfLines=Lst->Count;
        int Length = 0;
        AnsiString FirstLine = Lst->Strings[0];
        while(true)
        {
            int StartPos=FirstLine.Pos(";");
                if(!StartPos)
                    break;
                AnsiString RestString = FirstLine.SubString(StartPos+1,FirstLine.Length()-1);
                FirstLine=RestString;
                Length++;
        }
        Length++;
    int ** Column = new int*[Length];
        for(int i=0;i<Length;i++)
            Column[i]= new int[NumberOfLines];
        for(int i=0;i<NumberOfLines;i++)
        {
            AnsiString CurrentString = Lst->Strings[i];
                int Index=0;
                while(true)
                {
                    int StartPos=CurrentString.Pos(";");
                    if(!StartPos)
                        {
                            Column[Index][i]=CurrentString.ToInt();
                            break;
                        }
                        AnsiString RestString = CurrentString.SubString(StartPos+1,CurrentString.Length()-1);
                        Column[Index][i]=CurrentString.SubString(1,StartPos-1).ToInt();
                        CurrentString=RestString;
                        Index++;
                }
        }
        for(int i=0;i<Length;i++)
        {
            ShowMessage("New Column");
            for(int j=0;j<NumberOfLines;j++)
                    ShowMessage(Column[i][j]);    //требуемые столбцы.
        }
        for(int i=0;i<Length;i++)
            delete []Column[i];
        delete [] Column;
        delete Lst;
}
Естесена, необходимо еще и проверку сделать на всякие исключения. Но это Вы уж как-нить сами.
Удачи.
1
3 / 3 / 0
Регистрация: 24.03.2010
Сообщений: 11
29.03.2010, 01:52  [ТС]
Большое спасибо, Сергей! Код работает на ура.
Но все таки, как работать с TStringList и свойством Delimiter. В интернете ничего не могу найти конкретного...
0
 Аватар для Зоти Сергей
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
29.03.2010, 03:06
У меня нет шестого билдера, по этому пишу вслепую. Возможны ошибки.
Короче, у TStringList начиная с 6-ого билдера есть свойство
Delimiter и DelimiterText
в Delimiter записывается символ, который будет разделять текст находящийся в DelimiterText
на строки.
Таким образом, если написать
C++
1
2
3
TStringList * DelimiterList = new TStringList;
DelimiterList->DelimiterText="Hallo;World";
DelimiterList->Delimiter=';';
То В DelimiterList-e будут строки:
DelimiterList->Strings[0]="Hallo";
DelimiterList->Strings[1]="World";
По этому очень удобно парсить таким способом строку.
Ваш прошлый текст используя TStringList :: Delimiter и TStringList :: DelimiterText:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        TStringList *Lst = new TStringList;
        TStringList *DelimiterLst = new TStringList;
        Lst->LoadFromFile("C:\\Test.csv");
        int NumberOfLines=Lst->Count;
        DelimiterLst->Delimiter=';';
        DelimiterLst->DelimitedText=Lst->Strings[0];
        int Length=DelimiterLst->Count;
        int ** Column = new int*[Length];
        for(int i=0;i<Length;i++)
                Column[i]= new int[NumberOfLines];
        for(int i=0;i<NumberOfLines;i++)
        {
                DelimiterLst->Delimiter=';';
                DelimiterLst->DelimitedText=Lst->Strings[i];
                for(int j=0;j<DelimiterLst->Count;j++)
                {
                        Column[j][i]=DelimiterLst->Strings[j].ToInt();
                }
        }
        for(int i=0;i<Length;i++)
        {
                ShowMessage("New Column");
                for(int j=0;j<NumberOfLines;j++)
                        ShowMessage(Column[i][j]);    //òðåáóåìûå ñòîëáöû.
        }
        for(int i=0;i<Length;i++)
                delete []Column[i];
        delete [] Column;
        delete Lst;
        delete DelimiterLst;
}
2
3 / 3 / 0
Регистрация: 24.03.2010
Сообщений: 11
29.03.2010, 05:29  [ТС]
Сергей, спасибо за помощь, все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2010, 05:29
Помогаю со студенческими работами здесь

Заполнение из файла
Не пойму, что написать в кавычках - заполняю из файла типа Russia millet 6 France corn 5 Italy grain 4 Austria oat 3 3 массива...

запись переменных из файла
Положим мы строим график по некоторой функции X=chastota*(i/500-1); Y=sin(x)*5*amplituda; Где частота и амплитуда берутся из...

Значение переменных из файла
Хочу чтобы программа брала параметры из файла. На конкретном примере: #include &quot;ingame.h&quot; float ix; float iy; ...

Чтение переменных из файла
всем привет! такой вопрос: можно ли брать из какого-нибудь текстового файла(или другого) значения для переменных? примеру такой код: ...

Чтение переменных из файла
Здравствуйте. Подскажите, пожалуйста, в решении такой проблемы. Нашел код программы, которая позволяет считывать данные, заданные в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru