Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Выгрузить(считать) данные из таблицы csv в массивы


Автор: krounis 24.5.2017, 15:17
Есть два массива:
Код

int arr1[20];
int arr2[20];


Данные из них записываются в табличный файл data.csv следующим образом:
Код

QFile File("data.csv");
QTextStream out(&File);
if(File.open(QIODevice::WriteOnly|QIODevice::Truncate))
{
out<<"arr1"<<';';
out<<"arr2"<<';'<<"\r\n";
for (int i=0; i<20; i++)
{
out.setRealNumberNotation(QTextStream::ScientificNotation);
out<<arr1[i]<<';';
out<<arr2[i]<<';'<<"\r\n";
}
File.close();
}


Как выглядит файл после записи данных можно увидеть в прикл.

Вопрос: как обратно выгрузить или считать данные из этого табличного файла обратно в массивы int arr1[20] и int arr2[20] например после перезапуска программы?

Автор: borisbn 24.5.2017, 18:09
Код

QFile File("data.csv");
if(File.open(QIODevice::ReadOnly))
{
    QStringList lines = QString( File.readAll() ).split( QChar( '\n' ) );
    int i = 0;
    lines.remove( 0, 1 );
    for ( auto line : lines ) {
        QStringList numbers = line.split( QChar( ';' ) );
        arr1[ i ] = numbers[ 0 ].toInt();
        arr2[ i ] = numbers[ 1 ].toInt();
        i++;
    }
}

Добавь, только, проверки на количество строк и столбцов.

Автор: krounis 24.5.2017, 18:43
Цитата(borisbn @ 24.5.2017,  18:09)
Код

QFile File("data.csv");
if(File.open(QIODevice::ReadOnly))
{
    QStringList lines = QString( File.readAll() ).split( QChar( '\n' ) );
    int i = 0;
    lines.remove( 0, 1 );
    for ( auto line : lines ) {
        QStringList numbers = line.split( QChar( ';' ) );
        arr1[ i ] = numbers[ 0 ].toInt();
        arr2[ i ] = numbers[ 1 ].toInt();
        i++;
    }
}

Добавь, только, проверки на количество строк и столбцов.

а как?)) через условия? к каким переменным условия выставлять?

Добавлено через 5 минут и 29 секунд
Цитата(borisbn @ 24.5.2017,  18:09)
Код

QFile File("data.csv");
if(File.open(QIODevice::ReadOnly))
{
    QStringList lines = QString( File.readAll() ).split( QChar( '\n' ) );
    int i = 0;
    lines.remove( 0, 1 );
    for ( auto line : lines ) {
        QStringList numbers = line.split( QChar( ';' ) );
        arr1[ i ] = numbers[ 0 ].toInt();
        arr2[ i ] = numbers[ 1 ].toInt();
        i++;
    }
}

Добавь, только, проверки на количество строк и столбцов.

выводит ошибки:
user posted image

Автор: borisbn 25.5.2017, 10:00
1. Замени
Код
lines.remove( 0, 1 );

на
Код
lines.removeFirst();


2. Добавь опцию компилятора
Цитата
-std=c++11


Добавлено через 2 минуты и 19 секунд
Цитата(krounis @  24.5.2017,  18:43 Найти цитируемый пост)
а как?)) через условия? к каким переменным условия выставлять?

Проверяй количество строк в lines и в numbers. Открой справку по QStringList.

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