Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение массива из текстового файла
Форум на CrossPlatform.RU > Разработка > С\С++
IvanKa
Подскажите как проще всего (лучше и быстрее) прочитать массив флотов из текстового файла?

Флоты могут быть как "1", "1.0", "1.0е1" (без ковычек) а между ними пробел(ы), таб(ы), пустые строки (а может просто 1 пробел, а может просто конец строки)

нашёл как это на паскале делается с seekeof и всё такое... но кажется на c++ както получше это можно реализовать.

ЗЗЫ регулярные выражения не предлагать.

ЗЗЗЫ кол-во элементов известно. к примеру при начале чтения я знаю что в файле массив 7*5000000 (тоесть 7 массивов, в каждом по 5 миллионов флотов)..

ЗЗЗЫ строки могут быть разной длины.

пример:

Раскрывающийся текст

1 6
2.32е2

3 9.66 55.2 434.4543543543е22







232
Iron Bug
читать построчно и дальше sscanf-ом.
wiz29
Думаю, оптимальным было бы (при относительно больших файлах) читать файл целиком в текстовый стрим и оттуда заполнят значениями то что требуется.
IvanKa
Цитата(Iron Bug @ 6.4.2012, 12:35) *
читать построчно и дальше sscanf-ом.


дык формат строки не постоянен. как там шаблон записать? не прокатит...

вот когда там "пять интегеров через пробел в каждой строке" тогда понятно: fscanf(fd,"%d %d %d %d %d", i[1],i[2],i[3],i[4],i[5])

а когда строки не шаблонные?...

Iron Bug
пример разбора строки.
Раскрывающийся текст
#include "stdlib.h"
#include <cstdio>

using namespace std;

int main()
{
        const char buffer[] = "1.2 566    5566.4";
        const char *poffset = buffer;
        float value;
        int length = 0;
        int pos = 0;
        while(true) {
                pos = sscanf(poffset,"%f%n",&value,&length);
                if(pos == EOF)
                    break;
                poffset += length;
                printf("%f\n",value);

        }
        return 0;
}

правда, тут нужно уточнить, все ли компиляторы читают %n как количество считанных символов. но вроде все должны читать.
kwisp
можно попробовать с помощью istream_iterator или istreambuf_iterator
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.