Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
4 / 4 / 0
Регистрация: 11.03.2012
Сообщений: 120
1

Чтения данный из файла

03.10.2013, 22:30. Показов 1138. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Есть задача построить график по координатам Х Y. Числа нужно прочитать из файла. Как я понимаю нужно сделать массив для Х и Y. Но не знаю как прочитать их из файла *.txt, и как передать в Chart.Текстовые файлы имеют вид:
Кликните здесь для просмотра всего текста
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
11 0
12 0
13 0
14 0
15 011
16 0
17 0
18 0
19 0
20 0
21 0
22 0
23 0
24 0
25 07
26 037
27 029
28 022

Кликните здесь для просмотра всего текста
4.00000000000000E+0000 2.00000000000000E+0000
4.10000000000000E+0000 0.00000000000000E+0000
4.20000000000000E+0000 4.00000000000000E+0000
4.30000000000000E+0000 0.00000000000000E+0000
4.40000000000000E+0000 0.00000000000000E+0000
4.50000000000000E+0000 1.00000000000000E+0000
4.60000000000000E+0000 0.00000000000000E+0000
4.70000000000000E+0000 0.00000000000000E+0000
4.80000000000000E+0000 1.00000000000000E+0000
4.90000000000000E+0000 1.00000000000000E+0000
5.00000000000000E+0000 0.00000000000000E+0000
5.10000000000000E+0000 4.00000000000000E+0000
5.20000000000000E+0000 0.00000000000000E+0000
5.30000000000000E+0000 0.00000000000000E+0000
5.40000000000000E+0000 0.00000000000000E+0000
5.50000000000000E+0000 1.00000000000000E+0000
5.60000000000000E+0000 0.00000000000000E+0000
5.70000000000000E+0000 1.00000000000000E+0000
5.80000000000000E+0000 2.00000000000000E+0000
5.90000000000000E+0000 0.00000000000000E+0000
6.00000000000000E+0000 1.00000000000000E+0000
6.10000000000000E+0000 0.00000000000000E+0000
6.20000000000000E+0000 0.00000000000000E+0000
6.30000000000000E+0000 2.00000000000000E+0000
6.40000000000000E+0000 1.50000000000000E+0001

Причем заранее не известно колличество точек. Беда... Помогите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2013, 22:30
Ответы с готовыми решениями:

пример чтения картинки из файла
Есть пример чтения картинки из файла, но на Delphi. С литературой туго - учусь на разных...

Удаление файла, использующегося в данный момент
Я пишу антивирус, передо мной настала задача: Как удалить файл, который используется в данный...

Скорость поблочного чтения из файла в несколько Гб падает
Добрый день! Написал программку по чтению по кусочкам (6К) файла (~20ГБ). Когда я дохожу до...

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

17
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.10.2013, 22:35 2
В первой вставке у вас встречаются числа начинающиеся с нуля 037, 07 и т.д. Это нормально?
0
4 / 4 / 0
Регистрация: 11.03.2012
Сообщений: 120
03.10.2013, 22:46  [ТС] 3
они должны считываться как 37 и 7 соответственно.

Добавлено через 1 минуту
Почему то во всем этом файле все числа так заданы.

Добавлено через 8 минут
Так как файл заренее не известен,то нужно добавить openDialog,и уже после выбора файла загружать данные в два массива,и уже по ним строить график. Верно?
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.10.2013, 22:48 4
Верно, но 2 одномерных или 1 двумерный массив
0
4 / 4 / 0
Регистрация: 11.03.2012
Сообщений: 120
03.10.2013, 22:55  [ТС] 5
Я уже пересмотрел несколько учебников,но не нашел как реализовать это. Наверное одио двумерный будет удобнее.
Да и по форумам нет решения подобных задач. По крайней мере я не нашел.
Помогите,пожалуйста.

Добавлено через 3 минуты
Нужно ведь создать указатель на массив. Так как не известна его размерость...Запустить цикл и создавать следующюю его составляющюю. Но не знаю как это сделать.
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.10.2013, 23:49 6
Можно посчитать сначала кол-во строк и узнать размер массивов. Можно загрузить файл в TStringList и получите кол-во строк.
0
4 / 4 / 0
Регистрация: 11.03.2012
Сообщений: 120
03.10.2013, 23:54  [ТС] 7
gumi250, Вы могли бы примерный вариант этого показать?
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
04.10.2013, 00:27 8
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
    double *X, *Y;
    int Count;
//---------------------------------------------------------------------------
void TForm1::SeparatorCorrect(String &z)
{ z=z.Trim();
    char t=FloatToStr(1.1)[2];
    for (int k=1; k<=z.Length(); k++)  //.-46   ,-44
    { if (z[k]==46||z[k]==44)
            z[k]=t;
    };
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Memo1->Clear();
    TStringList* SL=new TStringList;
    SL->LoadFromFile("C:\\2.txt");
    int Count=SL->Count;
    X=new double[Count];
    Y=new double[Count];
    for(int i=0; i<SL->Count; i++)
    {
        int p=SL->Strings[i].Pos(" ");
        String s=SL->Strings[i].SubString(1,p).Trim();
        SeparatorCorrect(s);
        X[i]=StrToFloat(s);
        s=SL->Strings[i].SubString(p+1,SL->Strings[i].Length()-p).Trim();
        SeparatorCorrect(s);
        Y[i]=StrToFloat(s);
    }
    for(int i=0; i<Count; i++)
    {
        Memo1->Lines->Add(FloatToStr(X[i])+"  "+FloatToStr(Y[i]));
        Series1->AddXY(X[i], Y[i]);
    }
    delete SL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    delete[] X;
    delete[] Y;
}
//---------------------------------------------------------------------------
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
04.10.2013, 12:34 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Memo1->Clear();
    TStringList *SL = new TStringList;
    SL->LoadFromFile("d:\\test\\003.txt");
    TReplaceFlags rf = TReplaceFlags() << rfReplaceAll;
    SL->Text = StringReplace(StringReplace(SL->Text, ".", DecimalSeparator, rf),
        ",", DecimalSeparator, rf);
    SL->Text = StringReplace(SL->Text, " ", "=", rf); // Пары Name=Value
 
    int Count = SL->Count;
    X = new double[Count];
    Y = new double[Count];
    for (int i = 0; i < SL->Count; i++)
    {
        X[i] = StrToFloat(SL->Names[i]);
        Y[i] = StrToFloat(SL->ValueFromIndex[i]);
        Memo1->Lines->Add(FloatToStr(X[i]) + "  " + FloatToStr(Y[i]));
        Series1->AddXY(X[i], Y[i]);
    }
    delete SL;
}
Не проще будет?
1
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
04.10.2013, 12:52 10
Конечно проще. Нет предела оптимизации
1
4 / 4 / 0
Регистрация: 11.03.2012
Сообщений: 120
04.10.2013, 19:42  [ТС] 11
UI, Спасибо,но в строчке 17
Y[i] = StrToFloat(SL->ValueFromIndex[i]);
возникает ошибка [C++ Error] Spectrum.cpp(47): E2316 'ValueFromIndex' is not a member of 'TStringList'

Добавлено через 3 минуты
Это из-за того что у меня Builder 6? А какой лучше поставить тогда?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
04.10.2013, 19:54 12
Хм... Да почему же Builder 6 не поддерживает его? На кой фиг тогда Names поддерживается, если нельзя пару для него вытянуть? Что за бред? Главное, еще в Дельфи 6 работало, а в Билдере, видите ли, не допилили...

Цитата Сообщение от Султан Посмотреть сообщение
А какой лучше поставить тогда?
Ну уж есть ставить - то никак не ниже XE...
0
4 / 4 / 0
Регистрация: 11.03.2012
Сообщений: 120
04.10.2013, 19:56  [ТС] 13
Запустилась в RAD Studio XE, но при нажатии кнопки вылезает вот такое
Чтения данный из файла
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
04.10.2013, 20:06 14
У меня в XE2 вот чего выдает:

Чтения данный из файла


То же самое и на втором файле, прекрасно всё обрабатывается...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
04.10.2013, 20:07 15
А у тебя часом первый символ в файле - не пробел? Убери его...
0
4 / 4 / 0
Регистрация: 11.03.2012
Сообщений: 120
04.10.2013, 20:14  [ТС] 16
Нет. Вообще как то странно эта версия работает. Надо новую скачать.
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
05.10.2013, 02:46 17
Цитата Сообщение от UI Посмотреть сообщение
Не проще будет?
Оказывается ваш вариант не проще
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
05.10.2013, 09:58 18
Цитата Сообщение от Султан Посмотреть сообщение
Это из-за того что у меня Builder 6? А какой лучше поставить тогда?
... такой, чтоб стоял... .
Если напряжно после ST-> нажать Ctrl+пробел и посмотреть, какие функции предлагаются; и увидеть, что у своего Билдера имеется соотв. функция: Y[i] = StrToFloat(SL->Values[i]); (Values вместо ValueFromIndex), тогда... . Но может быть я ошибаюсь?

Добавлено через 34 минуты
... ошибаюсь, конечно, - SL-> вместо ST->
0
05.10.2013, 09:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2013, 09:58
Помогаю со студенческими работами здесь

Нужен код для чтения из файла в StringGrid
Вот код для записи в файл,не могу понять как написать код для чтения из файла в стринггрид,нужна...

Открытие файла. Алгоритм чтения в зависимости от расширения
Здравствуйте, форумчане! Программа работает с тремя типами файлов. Файлы имеют разную структуру....

Как узнать длину двоичного файла, открытого для чтения?
Всем здравствуйте. char* Bytes; char* sFName = &quot;asdf.bin&quot;; ifstream in; in.open...

В данный класс добавить код для построчного чтения из файла
помогите пожалуйста в данный класс надо добавить код для построчного чтения из файла...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru