Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > чтение из файла


Автор: TaNK 24.1.2008, 17:58
Код

         //22.01.2008 17:12:45
#include <vcl.h>
#include <iostream>
#include <fstream>
#include <cctype>

int main()
{
  using namespace std;
  char filename[60],ch;
  float fl;
  ifstream ifile;
  cout << "Vvedite nazvanie faila - ";

  cin.getline(filename,60);
  ifile.open(filename); // открываем выбранный файл

  if (!ifile.is_open())
     {
       cout << "Neniden fail";
       cin.get();
       exit(EXIT_FAILURE);
     }

  int count = 0;

  ifile >> fl;

  float *fl_mas = new float [10]; // массив из 10 float

  while (!ifile.eof())
   {

    /* if (isdigit(fl)) если так закоментить он будет читать числа из файла и запихивать в массив
       { а если в файле не числа...пробывал использовать cctype, но не прокатывает...потому что как я понимаю проверяет только первый символ или я запутался...кто предложит...что мне надо сделать..направьте на правильный путь*/ 
          fl_mas[count] = fl;  // загоняем в массив элементы находящиеся в файле
          count++;
          ifile >> fl;
     /*  }*/ 


   }

  cout << count << " " << endl;

  for (int i = 0; i < count; i++)
    cout << fl_mas[i]<< " ";

  ifile.close(); // закрываем файл
  delete [] fl_mas; // удаление памяти выделеной под массив float

  cin.get();
  return 0;
 }

Автор: ptr 24.1.2008, 18:55
TaNK, код конечно очень информативен, вот только понять что требуется из него сложно.

Автор: archimed7592 24.1.2008, 20:00
Цитата(TaNK @  24.1.2008,  17:58 Найти цитируемый пост)
направьте на правильный путь

Ты зачем-то выложил 50 строк кода, который совершенно не несёт никакой смысловой нагрузки и который содержит всего 2 строки комментариев, которые достаточно неясно описывают проблему. Правильный путь: описать свою проблемму русским языком, при необходимости, снабжая минимальным кодом, причём, больше внимания уделить описанию проблемы, а не вставлению простыни кода.

Автор: TaNK 25.1.2008, 09:04
прощу прощение за некоректный вопрос.
в данном коде я читаю из файла, который введен пользователём и сохраняю данные в массив. В файле данные могут быть такими
Код

1.txt
4401 4458
4803 2009

а может быть вот таким
Код

2.txt
22.10.2007  4401 4458
23.10.2007  4803 2009

если читать 1.txt сохраняет данные в массив нормально, но как пропускать из 2.txt дату...чтобы сохранять только числовые значения.

Автор: Lycifer 25.1.2008, 10:08
Простой способ если ты знаеш если ли дата в документе,
Конечно можно сделать разбитие строки, а потом проверку на точку,
ну тут станет вопрос что делать если ты хочеш перевести в double
ну в принципе у даты две точки, так что если имеется две точки то не записывать в массив.

Автор: mrbrooks 25.1.2008, 13:05
Насамом деле первое что приходит в мозг - это считывать все в строки - а затем при записи в массив просто их проверять на вхождение '.' в строку ф - й strchr(). 

Автор: archimed7592 25.1.2008, 14:58
TaNK, как уже сказали - лучше считывать строку полностью, после чего уже выкидывать из неё дату(если она есть). Только если не хочешь изобретать велосипед из strchr, то посмотри в сторону регулярных выражений. По наличию vcl.h в твоём коде я делаю вывод, что ты пользуешься билдером, который полностью поддерживает дельфёвую RTL, которая, IIRC, содержит необходимую ф-циональность для работы с регулярками.

Автор: TaNK 25.1.2008, 15:26
Цитата(archimed7592 @ 25.1.2008,  14:58)
TaNK, как уже сказали - лучше считывать строку полностью, после чего уже выкидывать из неё дату(если она есть). Только если не хочешь изобретать велосипед из strchr, то посмотри в сторону регулярных выражений. По наличию vcl.h в твоём коде я делаю вывод, что ты пользуешься билдером, который полностью поддерживает дельфёвую RTL, которая, IIRC, содержит необходимую ф-циональность для работы с регулярками.

archimed7592 - если можно привести пример..не обязательно на моем коде..

Автор: archimed7592 25.1.2008, 15:58
Могу показать пример с бустовым регеэкспом... или с Qt'шными. Но захочешь ли ты ставить себе буст или Qt(ни один из которых "просто так" на билдер не встанет)?
А билдера у меня, соответственно и хэлпа по нему. Просто слышал, что дэльфёвая RTL "слышала" про регулярки, подробнее не знаю, но регулярки - они и в африке регулярки smile.

Автор: TaNK 25.1.2008, 16:27
Цитата(archimed7592 @ 25.1.2008,  15:58)
Могу показать пример с бустовым регеэкспом... или с Qt'шными. Но захочешь ли ты ставить себе буст или Qt(ни один из которых "просто так" на билдер не встанет)?
А билдера у меня, соответственно и хэлпа по нему. Просто слышал, что дэльфёвая RTL "слышала" про регулярки, подробнее не знаю, но регулярки - они и в африке регулярки smile.

спасибо з совет!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)