Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание и разбитие инфы из файла, Работа с текстом и с файлами 
:(
    Опции темы
champion
Дата 2.12.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Доброе время суток!
В С++ я новичек, и хотел попросить Вас объяснить мне, как получить содержание файла? Потом разбить его его на массивы? К примеру первая строка это значение одной переменной, остальные есть координаты:
10 10
0 100
и т.п.
Как все это запихнуть в массив?
Вот все, что я смог написать smile
Код

 FILE* READ = fopen("input.txt", "r");
 if(!READ) {
  cout << "error";
 }else{
  cout << "file opened;";
 }
 fclose(READ);



--------------------
user posted image
PM MAIL   Вверх
timurka
Дата 2.12.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Подскажите, пожалуйста! Как можно считывать с файла линию цифр? Можно ли это делать при помощи getline()? 
Код

{    
ifstream inputfile;
inputfile.open("file.txt");
float zifr[46],zifr2[46];
inputfile.getline(zifr,sizeof(zifr));
inputfile.getline(zifr2,sizeof(zifr2));
{
if (zifr==1234) cout<<”Текст 1”;
else if (zifr==1245) cout<<”Текст 2”;
}
{
if (zifr2==1256) cout<<”Текст 3”;
else if (zifr2==1222) cout<<” Текст 4”;
}
}

С этим кодом не получается. 
PM MAIL   Вверх
Rockie
Дата 3.12.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(timurka @  2.12.2006,  19:09 Найти цитируемый пост)
Подскажите, пожалуйста! Как можно считывать с файла линию цифр? Можно ли это делать при помощи getline()? 

можно, к примеру так:
Код
#include <iostream>
#include <fstream>

using namespace std;

int main(){
  char buff[81];                     // массив для строки
  ofstream write_file("table.txt");  // создаем файл table.txt
   if (!write_file) {cout<<"No such file"; return 0; }

   for(int i=0;i<10;i++)             // пишем в файл table.txt 10 строчек
     write_file<<"String #"<<i<<endl;
     write_file.close();             // закрываем

  ifstream read_file("table.txt");   // открываем для чтения
  if (!read_file) { cout<<"No such file"; return 0; }
   while(!read_file.getline( buff, sizeof(buff) ).eof() )
     { cout<<buff<<endl;
     }

   cin.get();
   return 0;
}



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
GIK
Дата 3.12.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



champion, если хочешь занести символьные данные, то не проблема, а если хочешь их конвертить к int значению, то тогда проблематично.......
Народ, давайте разрулим тему smile  Как же всетаки переконвертить char символ в виде цифры (от 0 до 9) в int эквивалент???
Код

#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
char ch;
char m[128];
ifstream in;
in.open("C:\\test\\txt.txt", ios::binary);
if(!in){
  cout <<  "not this file";
  cout <<  "The haker  you unusable";
  cin >> ch;  // ya, ya  :)
}
in.getline(m, 9);
for(int i=0; i<9; i++){
 cout <<  m[i] << endl;
}
in.close();

cin.get();   // ya, ya  :)

    return 0;
}





--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Anikmar
Дата 3.12.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(GIK @ 3.12.2006,  20:30)
Народ, давайте разрулим тему smile  Как же всетаки переконвертить char символ в виде цифры (от 0 до 9) в int эквивалент???

Если проще всего то так:
Код

char Symbol;
int Result;
Symbol = '5';
Result = Symbol - '0';


PM MAIL ICQ   Вверх
champion
Дата 10.12.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Код

read.getline(m, sizeof(m)).eof()

Вы не могли бы объяснить, что есть eof()?

Добавлено @ 12:05 
И как перевести chat в int? smile Если там действительно записан Int smile


--------------------
user posted image
PM MAIL   Вверх
champion
Дата 10.12.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



И в догонку smile Если обращаться к вектору, к ключу которогонет вылазиет ошибка, как сделать, чтобы не допускать ошибок? К примеру в цикле. Проверку на сущ. значения


--------------------
user posted image
PM MAIL   Вверх
Xenon
Дата 10.12.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



champion, char в int? atoi(); А если по отделеьности для каждого элемента массива, то можешь просто код нуля отнимать, как показал Anikmar.
Цитата
EOF Function
Returns a Boolean value True when the end of a file opened for Random or sequential Input has been reached.


Это сообщение отредактировал(а) Xenon - 10.12.2006, 15:56


--------------------
user posted image  
PM MAIL   Вверх
Rockie
Дата 10.12.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(champion @  10.12.2006,  11:55 Найти цитируемый пост)
Вы не могли бы объяснить, что есть eof()?

champion, конечно! но это легко и самому сделать smile
Цитата
Indicates if the end of a stream has been reached.

 
bool eof( ) const;
 

Return Value
1 or true if the end of the stream has been reached, 0 or false otherwise.


Example:

Код
// basic_ios_eof.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

using namespace std;

int main( int argc, char* argv[] ) 
{
   fstream   fs;
   int n = 1;
   fs.open( "C:\\basic_ios_eof.txt" );   // an empty file

   cout << fs.eof() << endl;
   fs >> n;   // Read the char in the file
   cout << fs.eof() << endl;
}



Это сообщение отредактировал(а) Rockie - 10.12.2006, 18:03


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
zabivator
Дата 10.12.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



champion, std::vector::at вместо std::vector::operator[] - доступ по индексу с проверкой диапазона. Не забываем отлавливать ексепшины: std::out_of_range
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
champion
Дата 11.12.2006, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Код

 while(!read.getline(m,sizeof(m)).eof()) {

В этом случае мы предварительно отводим уже память, которой ограничена m, типа char на определенное кол-во бит. Но если в строке больше символов? Как динамично изменить размер под размер строки? 


--------------------
user posted image
PM MAIL   Вверх
zabivator
Дата 11.12.2006, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



champion, читать из потока по sizeof(m), а потом делать
Код

std::string s;
while(!read.getline(m,sizeof(m)).eof()) s+=m;


Это сообщение отредактировал(а) zabivator - 11.12.2006, 07:16
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Xenon
Дата 11.12.2006, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



zabivator, а не проще тогда уже читать посимвольно? smile


--------------------
user posted image  
PM MAIL   Вверх
zabivator
Дата 11.12.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Xenon, по-моему проще boost::serilisation юзать, а не велосипеды мастерить.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
champion
Дата 11.12.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Читать посимвольно? smile) Можно пример. Понял о чем говорите, но не представляю реализацию.


--------------------
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0996 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.