Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Считывание файла


Автор: ShaitanDevil 18.3.2010, 08:04
Здравствуйте, есть задача, считать файл, в файле несколько строк. Записать все эти строки в буффер. Строки формата test:123. Нужно отфильтровать данные из буффера на два буффера. В одном будет содержаться test, а в другом 123. Пробовал сделать - не получается=\.

Автор: azesmcar 18.3.2010, 08:47
Цитата(ShaitanDevil @  18.3.2010,  08:04 Найти цитируемый пост)
Пробовал сделать - не получается=\. 

покажи код.

Автор: NightmareZ 18.3.2010, 09:45
Код
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>

std::vector<std::string> buf1, buf2;

void split(std::string curr)
{
    buf1.push_back(strtok(const_cast<char*>(curr.c_str()), ":"));
    buf2.push_back(strtok(NULL, ":"));
}

int main()
{
    std::vector<std::string> arr(
        std::istream_iterator<std::string>(std::ifstream("input.txt")),
        std::istream_iterator<std::string>()
        );

    for_each(arr.begin(), arr.end(), split);

    for (std::vector<std::string>::iterator it1 = buf1.begin(), it2 = buf2.begin(); 
         it1 != buf1.end() && it2 != buf2.end(); it1++, it2++)
         std::cout << *it1 << " - " << *it2 << std::endl;
}

Автор: bsa 18.3.2010, 11:33
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: world 18.3.2010, 23:02
Если всегда соблюдается есть пара значений а1:а2(не одно не может біть пропущенно, то можно использовать код

Код

#include <windows.h>
#include <tchar.h>
#include <list>
using namespace std;

list<TCHAR*> buf1, buf2;

BOOL ReadAndSplit(TCHAR* name)   //name - имя файла из которого читаются строки
{
    BOOL res = TRUE;
    HANDLE h = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    TCHAR* buf = new TCHAR[];
    if(h == INVALID_HANDLE_VALUE)
    {
        res = FALSE;
    }
    if(res)
    {
        DWORD* dwSize = new DWORD;
        DWORD size = SetFilePointer(h, 0, 0, FILE_END);
        SetFilePointer(h, 0, 0, FILE_BEGIN);
        res = ReadFile(h, buf, size, dwSize, 0);
        delete dwSize;
        CloseHandle(h);
    }
    if(res)
    {
        TCHAR* tmp = _tcstok(buf, _T(":"));
        buf1.push_back(tmp);
        tmp = _tcstok(NULL, _T("\n"));
        buf2.push_back(tmp);
        while(true)
        {
            tmp = _tcstok(NULL, _T(":"));
            if(tmp == NULL)
            {
                break;
            }
            buf1.push_back(tmp);
            tmp = _tcstok(NULL, _T("\n"));
            buf2.push_back(tmp);
        }
    }
    return res;
}

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