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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами, как из файла заполнить массив 
V
    Опции темы
Baib
Дата 27.11.2006, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть текстовый файл. В стоки записаны float'ы. Каждую стоку нужно считать в массив float'ов.
Вопрос: КАК smile 
PM WWW   Вверх
MaxWave
Дата 27.11.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



надеюсь строчки из файла получать умеешь (getline например)? 
после этого юзай функцию atof

double atof(const char *str); - возвращает флоат из чаров

PM MAIL   Вверх
Baib
Дата 27.11.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нет, не умею  smile  
smile 
PM WWW   Вверх
Kuvaldis
Дата 27.11.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



Baib, 
Если записаны данные типа float, то лучшим решением будет использование функции
int fscanf(FILE *stream, const char *format[, address, ...]);
Смысл использования такой же, как и у обычного scanf, только в вызове добавляется указатель файла. Плюс использования этой функции в том, что тебе не нужно думать о буфере для чтения символьного представления, просто надо подставить адрес нужной переменной типа float 

Это сообщение отредактировал(а) Kuvaldis - 27.11.2006, 22:35


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Voldemar2004
Дата 27.11.2006, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Baib, держи: создай файл "D:\TEST.xxx" в него запиши:
Цитата
123, -0.3123, -234.5345,
   -0.123, 
-90.5767   ,    -32.434
Код
#include <iostream>
#include <fstream>
#include <stdlib>

void LoadFromFile(char* );
void UserArray(char *);

float *array;
int n;

int main()
{

LoadFromFile("D:\\TEST.xxx");

for(int i=0; i<n; ++i) std::cout << array[i] << '\t';

std::cin.get();

free(array);

return 0;
}

void LoadFromFile(char* FileName)
        {
            std::string str;

            std::ifstream fin(FileName);

            std::string Buffer;

            while ( !fin.eof() )
            {
            getline(fin, str); 
            Buffer += str;   
            }

            UserArray((char*) Buffer.c_str());
        }

void UserArray(char *String)
{

n=0;
            char *p = strtok( (char*) String, ", ");

            while (p)
            {
                ++n;
                array = (float*)realloc(array, (n)*sizeof(float));
                array[n-1] = atof(p);
                p = strtok(NULL, ", ");
            }
        }


Это сообщение отредактировал(а) Voldemar2004 - 27.11.2006, 23:15


--------------------
i_i 
(';') 
(V)

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


Новичок



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

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



че-то не работает..
просто stdlib'а у меня нет, есть stdlib.h.. но он на getline ругается :  'getline' : undeclared identifier
если подключить istream.h и писать 
Код

istream::getline(fin, str)

    
 то 'getline' : none of the 3 overloads can convert parameter 1 from type 'class std::basic_ifstream<char,struct std::char_traits<char> >'

что делать? smile 
PM WWW   Вверх
JackYF
Дата 28.11.2006, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



Попробуй fin.getline()...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Baib
Дата 28.11.2006, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пробовал.. не помогает
'class std::basic_istream<char,struct std::char_traits<char> > &__thiscall std::basic_istream<char,struct std::char_traits<char> >::getline(char *,int)' : cannot conv
ert parameter 1 from 'class std::basic_ifstream<char,struct std::char_traits<char> >' to 'char *'
PM WWW   Вверх
JackYF
Дата 28.11.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



Забавно... Какой компилятор?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Baib
Дата 28.11.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Microsoft Visual C++ 6.0 ...

Во.. попробовал так:
Код

#include <fstream.h>
#include <stdio.h>

FILE *streamI;
FILE *streamO;

int main(int argc, char* argv[])
{   
 streamI = fopen("In.txt", "r+");
 streamO = fopen("Out.txt", "w+");

float fp;
 
        fseek( streamI, 0L, SEEK_SET );


while ( SEEK_CUR != SEEK_END)
{
    fscanf( streamI, "%f", &fp );
    fprintf(streamO, "%f ", fp );

}
        fclose(streamI);
        fclose(streamO);

    return 0;


}

Всё хорошо.. только зацикливается )) Всё читает и пишет как положено, потом последние элемент повторяет пока прогу не вырубишь.. как условие на выход поставить?

Это сообщение отредактировал(а) Baib - 28.11.2006, 21:39
PM WWW   Вверх
Rockie
Дата 28.11.2006, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Baib @  28.11.2006,  21:25 Найти цитируемый пост)
Всё хорошо.. только зацикливается )) Всё читает и пишет как положено, потом последние элемент повторяет пока прогу не вырубишь.. как условие на выход поставить?

Код
  while (!feof(streamI))
  {
    fscanf( streamI, "%f", &fp );
    fprintf(streamO, "%0.2f ", fp );
  }





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


Новичок



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

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



Ура!  smile 
Огромное тебе человеческое спасибо! ))
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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