wczytanie duzego pliku txt\csv z separatorem zmiennych

0

witam
mam za zadanie wczytanie i obrobienie bardzo duzych plików txt/csv w formacie jak ponizej

s|godzina|i|i|i|i|i
B;1828;257924;191825;47;16;2;
B;1828;257924;191825;31;16;3;
B;1828;257924;191825;36;17;3;
L;1828;257924;191825;33;16;4;
B;1828;257933;191825;32;15;1;

Jaka metoda wczytania danych będzie najlepszą i najszybszą formą obrabiania takich duzych danych?

Czy mógłby ktoś pomóc stworzyć kod wczytujący dane z pliku z zapisaniem do formatu umożliwiającego późniejszą obrobkę!?
(1.zamienić literę "B" na liczbę, 2.usunąć wszystkie wiersze z literą "L;" na poczatku linii. 3.utworzyć swoje zmienne typu wartosc z drugiej linii minus wartosc z pierwszej linii itp.)

Z góry dziękuję za odpowiedzi.

poniżej próbka zle działającego kodu, na razie udało mi się odczytac dane jednak nie wiem jak je podzielić na różne zmienne wg separatora ";",

#include "stdafx.h"
#include <istream>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <sstream>


using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

	ifstream  data("abs.txt");
	string line;
	while (getline(data, line))
	{
		int cell_1;
		int cell_2;
		int cell_3;

		getline(data, cell_1, ';');
		getline(data, cell_2, ';');
		getline(data, cell_3, '\n');
		cout << "\n" << cell_1 << cell_2 << cell_3 << endl;

	}

	
	system("pause");
	return 0;
}

 
3

Możesz użyć sscanf do rozbicia sobie tych części. Tak chyba będzie najprościej, przykład:

#include <iostream>
#include <string>
#include <cstdio>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;

class Record {
private:
	char _s;
	unsigned _hours;
	unsigned _minutes;
	unsigned _seconds;
	unsigned _i1;
	unsigned _i2;
	unsigned _i3;
	unsigned _i4;
	unsigned _i5;
public:
	friend ostream& operator<<(ostream& out, const Record& r)
	{
		out << "S:  " << r._s << "\n"
			<< "H:  " << r._hours << "\n"
			<< "M:  " << r._minutes << "\n"
			<< "S:  " << r._seconds << "\n"
			<< "I1: " << r._i1 << "\n"
			<< "I2: " << r._i2 << "\n"
			<< "I3: " << r._i3 << "\n"
			<< "I4: " << r._i4 << "\n"
			<< "I5: " << r._i5 << "\n";
		return out;
	}

	friend istream& operator>>(istream& in, Record& r) {
		string line;
		getline(in, line);
		sscanf(line.c_str(), "%c;%u:%u:%u;%u;%u;%u;%u;%u;",
			&r._s, &r._hours, &r._minutes, &r._seconds,
			&r._i1, &r._i2, &r._i3, &r._i4, &r._i5);
		return in;
	}
};

int main() {
	vector<Record> records{istream_iterator<Record>(cin), istream_iterator<Record>()};
	copy(records.cbegin(), records.cend(), ostream_iterator<Record>(cout, "\n"));
	return 0;
}

http://ideone.com/I4JvkS

0

witam dzieki za odpowiedz ale cos mi ten kod nie dziala. w sensie otwiera sie cmd.exe i nic wiecej.
chcialbym te dane odczytac z pliku txt/csv.
i chyba najlepiej by bylo jakby byly zapisywane do tablicy tak bym mogl pozniej wykonywac operacje na tych liczbach tak jak w excelu np. tabela[2,2]=tabela[2,1]-tabela[1,1];

1 użytkowników online, w tym zalogowanych: 0, gości: 1