C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как загрузить файл в вектор ?, Векторы, с чем их едят
Ден
  Отправлено: 15.11.2005, 21:28


Не зарегистрирован







Как загрузить файл в вектор ?
А как сохранить вектор в файл ?
exp
Отправлено: 15.11.2005, 22:48


Мастер участка

Группа: Участник
Сообщений: 304



Для начала определимся с акцентом
"как ЗАГРУЗИТЬ файл в вектор" или "Как загрузить файл В ВЕКТОР"?
Если вариант 1, то FileRead(), если вариант 2 то vector::push_back().
Ден
Отправлено: 16.11.2005, 00:36


Не зарегистрирован







QUOTE (exp @ 15/11/2005, 22:48)
Для начала определимся с акцентом
"как ЗАГРУЗИТЬ файл в вектор" или "Как загрузить файл В ВЕКТОР"?
Если вариант 1, то FileRead(), если вариант 2 то vector::push_back().

push_back() добавляет новый элемент ?
Это выходит список надо построчно добавлять в вектор for ом ?
А во что его тогда грузить чтобы различать элементы ?
Ден
  Отправлено: 16.11.2005, 00:46


Не зарегистрирован







Если всетаки добавлять элементы фором , то куда грузить текстовый список ?
Георгий
Отправлено: 16.11.2005, 01:19


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



QUOTE (Ден @ 16/11/2005, 01:46)
Если всетаки добавлять элементы фором , то куда грузить текстовый список ?

вектор чего загружаем? вектор строк?
я так думаю что строк
  Отправлено: 16.11.2005, 01:32


Не зарегистрирован







QUOTE (Георгий @ 16/11/2005, 01:19)
QUOTE (Ден @ 16/11/2005, 01:46)
Если всетаки добавлять элементы фором , то куда грузить текстовый список ?

вектор чего загружаем? вектор строк?

я так думаю текстовый список это вектор строк
Gedeon
Отправлено: 16.11.2005, 13:52


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (Ден @ 15/11/2005, 21:28)
Как загрузить файл в вектор ?
А как сохранить вектор в файл ?

Каждому лектору в жопу по вектру. smile.gif
Ден
  Отправлено: 16.11.2005, 17:34


Не зарегистрирован







QUOTE (Gedeon @ 16/11/2005, 13:52)
QUOTE (Ден @ 15/11/2005, 21:28)
Как загрузить файл в вектор ?
А как сохранить вектор в файл ?

Каждому лектору в жопу по вектру. smile.gif

Наверное ты не знаеш как это делается. biggrin.gif
exp
Отправлено: 16.11.2005, 21:43


Мастер участка

Группа: Участник
Сообщений: 304



Не надо бывалых обижать, Ден. Это ты не хочешь головой думать.

Если грузишь список строк, и тебе не известно какого они размера, то придется чуток погемориться: тебе придется считывать по 1 байту из файла и добавлять его к буферной строке пока не дойдешь до конца файла; кажный символ ты должен проверять на равенство символу конца строки (надеюсь, знаешь, что за символ, а то получается что я тут бисер мечу); в случае, если очередной символ есть символ конца строки, ты должен добавить его в вектор методом push_back().
Все. По этому описанию уже писать можно.
Ден
  Отправлено: 17.11.2005, 00:56


Не зарегистрирован







AnsiString t;
vector vi;
char *f;
vi.clear();
vi.begin();


OpenDialog1->Execute();

t=OpenDialog1->FileName;

handle=FileOpen(t,fmOpenRead);
len1=FileSeek(handle,0,2);
FileSeek(handle,0,0);
f=new char[len1+1];
FileRead(handle,f,len1);
FileClose(handle);


t="";
for (int x=0;x t=t+f[x];

if (f[x]==00){vi.push_back(t);t="";x++;}

}
вот так работает, но медленно.
ВАрианты ?
Asher
Отправлено: 17.11.2005, 11:10


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Попробуй такой вариант.
CODE

//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include <istream>
#include <fstream>
#include <string>
#include <vector>
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
std::string sFile("E:\\Temp\\test.txt");//
std::ifstream fsFrom(sFile.c_str());//
if(!fsFrom)                    //
 return -1;                    //Не открывается файл
std::vector<std::string> sArr; //
std::string sVal;//
int nCount = 0;
while(getline(fsFrom, sVal)){
 sArr.push_back(sVal);
 ++nCount;
}
int nSize = sArr.size();//
fsFrom.close();                  //
return 0;
}
//---------------------------------------------------------------------------

Это полный код консольного проекта.

P.S. Раньше не писал — думал ты халявщик. Код хочешь и все. wink.gif
Но раз уж ты что-то написал — теперь не грех и поучаствовать biggrin.gif
Ден
  Отправлено: 17.11.2005, 21:13


Не зарегистрирован







ну вот пошаманил я с векторами, работает на отлично, скорость высокая.
Как теперь это дело в файл сохранить ?
Знаю только 2 метода, один тормознутей другого.
Ден
  Отправлено: 22.11.2005, 01:52


Не зарегистрирован







Підкажіть будьласка sad.gif
Asher
Отправлено: 22.11.2005, 09:55


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Выражайтесь яснее. Вчем конкретно Ваша проблема?

Если самому думать неохота, то вот:
Это вставить перед главной функцией предыдущего примера
CODE
#include <algorithm>
//---------------------------------------------------------------------------
class OutStr
{
 std::ofstream *ofs_;
public:
 OutStr(std::ofstream &e_ofs):ofs_(&e_ofs){};
 void operator()(std::string &Obj)
 {
  *ofs_ << Obj <<std::endl;
 }
};
//---------------------------------------------------------------------------

Это в конце функции перед return 0;
CODE
std::string sFileTo("E:\Temp\testout.txt");//
std::ofstream fsTo(sFileTo.c_str());//
if(!fsTo)                      //
 return -2;                    //Не открывается файл
std::for_each(sArr.begin(), sArr.end(), OutStr(fsTo));//
fsTo.close();                  //

Вернуться в Вопросы программирования в C++Builder