Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2009, 19:44   #1
Davlet M
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 34
Вопрос С++ Builder - Чтение файла :(

Возникла проблема на пути написания программы, необходимо произвести чтение из файла данных, внешняя программа создает файл типа:
.125463к .556684к
.789445к .224514к
.584112к .124896к

Мне нужно получать значения первого столбца для одной величины, а значения второго столбца для второй величины. размер числа может быть разным, поэтому записывать определенные позиции символов не получается. Пожалуйста, помогите!
Davlet M вне форума Ответить с цитированием
Старый 27.08.2009, 20:12   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Что именно является значением? Только число или число с буквой 'к'? Или еще и точку нужно взять?

В общем, используя средства Билдера вот так можно (за значение берет только число). Значения помещаются в 2 мемо.

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *list = new TStringList;
int i,a,b;
AnsiString tmp1,tmp2;

list->LoadFromFile("test.txt");
for(i=0; i<list->Count; i++)
 {
  tmp1 = list->Strings[i];
  a = tmp1.Pos(".");
  b = tmp1.Pos("к");
  tmp2 = tmp1.SubString(a+1,b-a-1);
  Memo1->Lines->Add(tmp2);

  tmp1 = list->Strings[i].SubString(b+1,tmp1.Length());
  a = tmp1.Pos(".");
  b = tmp1.Pos("к");
  tmp2 = tmp1.SubString(a+1,b-a-1);
  Memo2->Lines->Add(tmp2);
 }
delete list;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.08.2009, 20:51   #3
Davlet M
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 34
По умолчанию

Спасибо, нужно только числа, попробую применить в своей программе.

что-то у меня не получается... может из-за того, что я не совсем точно привел формат файла..

там сначала 7 строк какой-то дребидени, их нужно пропустить, а потом вот так:

.150000Е+02 .704942Е+02
.151500Е+02 .698727Е+02

Как мне скорректировать код, который был написан до этого?

Последний раз редактировалось Stilet; 28.08.2009 в 08:09.
Davlet M вне форума Ответить с цитированием
Старый 27.08.2009, 23:19   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *list = new TStringList;
int i,a,b;
AnsiString tmp1,tmp2;

list->LoadFromFile("test.txt");
for(i=7; i<list->Count; i++)
 {
  tmp1 = list->Strings[i];
  a = tmp1.Pos(".");
  b = tmp1.Pos(" ");
  tmp2 = tmp1.SubString(a+1,b-a-1);
  Memo1->Lines->Add(tmp2);

  tmp1 = list->Strings[i].SubString(b+1,tmp1.Length());
  a = tmp1.Pos(".");
  tmp2 = tmp1.SubString(a+1,tmp1.Length());
  Memo2->Lines->Add(tmp2);
 }
delete list;
}
Вы лучше разберитесь в коде, тогда сможете изменить как вам нужно.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.08.2009, 23:28   #5
Davlet M
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 34
По умолчанию

Я принцип понял, но тут некоторые вещи мне не знакомы, не совсем понятны 3 строки, начиная от a=tmp1.Pos("."); до memo1, потом непонятно после Мемо1 и до Мемо2, если не трудно поясните, я просто совсем недавно программирую.
Davlet M вне форума Ответить с цитированием
Старый 27.08.2009, 23:39   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
tmp1 = list->Strings[i];   //  tmp1 = i-я строка из list
  a = tmp1.Pos(".");        //  a = позиция первой найденной точки
  b = tmp1.Pos(" ");       // b = позиция первого пробела
  tmp2 = tmp1.SubString(a+1,b-a-1);  // tmp2 = подстрока из tmp1
            // с (a+1)-ого символа длинной в (b-a-1)
  Memo1->Lines->Add(tmp2);   // добавляем в Memo1 строку tmp2

  tmp1 = list->Strings[i].SubString(b+1,tmp1.Length()); // берем оставшуюся часть строки (без первого числа)
  a = tmp1.Pos(".");
  tmp2 = tmp1.SubString(a+1,tmp1.Length());
  Memo2->Lines->Add(tmp2);
Используются стандартные методы для AnsiString-строк.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.08.2009, 23:44   #7
Davlet M
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 34
По умолчанию

спасибо, а можно использовать вместо Мемо заполнение флоат массива, применив СтрТуФлоат?
Davlet M вне форума Ответить с цитированием
Старый 27.08.2009, 23:53   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Конечно можно. В мемо я для примера помещал.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение из файла dedokk1234 Общие вопросы C/C++ 0 15.06.2009 19:10
Чтение данных из файла Excel в C++Builder Max2114 C++ Builder 6 15.01.2009 11:32
Чтение из файла Amen БД в Delphi 2 09.12.2008 10:40
Чтение файла Stanislav Общие вопросы Delphi 18 24.11.2007 20:45
чтение файла Arteom Общие вопросы Delphi 6 27.08.2007 18:15