crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> контейнер вектор записать в файл, помощь по Qt4
registr
  опции профиля:
сообщение 16.11.2009, 18:48
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 115
Регистрация: 16.11.2009
Пользователь №: 1234

Спасибо сказали: 8 раз(а)




Репутация:   1  


Помогите пожалуйста, не знаю как записать в файл вектор а:

QVector<float> a;
// далее определяю a

// помогите дальше записать его в файл, например, в file.txt

QVector<float> b;
// а потом считать с него в вектор b
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
registr
  опции профиля:
сообщение 17.11.2009, 18:49
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 115
Регистрация: 16.11.2009
Пользователь №: 1234

Спасибо сказали: 8 раз(а)




Репутация:   1  


Вообщем да. Если файл нигде дальше открываться не будет заново, то его можно не закрывать.

Вдруг кому-нибудь еще пригодиться:
// #include<QIODevice>
// ...
QVector<float> A1;
// определяю вектор A1
//...
// записываю вектор A1 в текстовый файл
QFile file1("file.txt");
file1.open(QIODevice::WriteOnly);
QTextStream out1(&file1);
for (int i=0; i<A1.size(); i++)
out1 << A1[i]  << "\n"; // запишется в столбик
file1.close();
// ...    
// записываю вектор  A1 в бинарный файл
QFile file2("file.dat"); // можно также в "file.bin"
file2.open(QIODevice::WriteOnly);
QDataStream out2(&file2);
out2 << A1;
file2.close();
//...
QVector<float> A2;
// считываю из текстового файла в вектор A2
QString str;
file1.open(QIODevice::ReadOnly);
QTextStream in1(&file1);
while (!file1.atEnd())
{
   str = in1.readLine();
   A2.push_back(str.toFloat());
}
// ...
QVector<float> A3;
// считываю из бинарного файла в вектор A3
file2.open(QIODevice::ReadOnly);  
QDataStream in2(&file2);
in2 >> A3;
//...

:rolleyes:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 18.11.2009, 13:35
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Ну есть замечания по поводу кода. Поправил немного. Обратите внимания на параметры, с которыми файл открывается. Взял кусок кода, относящиеся только к QTextStream
// #include<QIODevice>
// ...
QVector<float> A1;
// определяю вектор A1
//...
// записываю вектор A1 в текстовый файл
QFile file1("file.txt");
file1.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
QTextStream out1(&file1);
for (int i=0; i<A1.size(); i++)
out1 << A1[i]  << endl; // запишется в столбик
file1.close();
// ...    

//...
QVector<float> A2;
// считываю из текстового файла в вектор A2
QString str;
file1.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream in1(&file1);
while (!file1.atEnd())
{
   str = in1.readLine().simplified();
   A2.append(str.toFloat());
}
//...

Также обратите внимание, что при чтении строки я убираю лишние пробелы. Потом лучше перевод из строки в число делать с проверкой вот так:
while (!file1.atEnd())
{
   bool ok = false;
   str = in1.readLine().simplified();
   float f = str.toFloat(&ok);
   if(ok) A2.append(f);
}
//...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- registr   контейнер вектор записать в файл   16.11.2009, 18:48
- - AD   QFile* file; /* где-то определено и инициализирова...   16.11.2009, 18:57
- - Litkevich Yuriy   в TXT, только поштучно руками сохранять. Если же п...   16.11.2009, 19:02
- - registr   Спасибо, попробую сегодня. Чтение аналогично, толь...   16.11.2009, 19:03
|- - AD   Ну тут резонный задан вопрос. Файл текстовый? Если...   16.11.2009, 19:26
- - registr   Большое спасибо!   16.11.2009, 19:32
- - registr   Методом проб и ошибок удалось записать вектор в фа...   16.11.2009, 23:44
- - Litkevich Yuriy   Цитата(registr @ 17.11.2009, 2:44) file.c...   16.11.2009, 23:58
- - registr   Вообщем да. Если файл нигде дальше открываться не ...   17.11.2009, 18:49
|- - AD   Ну есть замечания по поводу кода. Поправил немного...   18.11.2009, 13:35
- - registr   ЦитатаQFile file1("file.txt"); file1.op...   17.11.2009, 22:19
|- - AD   Цитата(registr @ 17.11.2009, 22:19) Такой...   17.11.2009, 22:35
- - registr   В векторе порядка 50000 чисел, но может быть и бол...   18.11.2009, 11:46
- - registr   Спасибо, попрубую сегодня с этим кодом. Вот была ...   18.11.2009, 16:35
- - AD   Цитата(registr @ 18.11.2009, 16:35) здесь...   18.11.2009, 18:09


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 7:24