Strona 1 z 1

Rozdzielanie wczytanych danych

Napisane: środa, 27 czerwca 2012, 12:56
przez boogi
Witam,
staram się pobrać dane z pliku txt, które zapisane są w formie:

Code: Zaznacz cały

login$smieci
Napisałem takie coś:

Code: Zaznacz cały

#include "stdafx.h"
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
	char zawartosc[] = {0};
	char login[] = {0};
	char separator('$');

	ifstream Plik;
	Plik.open("C:\\dane.ini");
	while(!Plik.eof())
	{
		Plik >> zawartosc;
	}
	Plik.close();

	for(int a = 0; a<=10; a++)
	{
		if(zawartosc[a] == separator)
		{
			for(a; a != 0; a--)
			{
				zawartosc[a] = login[a];
			}
		}
	}

	cout<<login;

	cin.get();
	return 0;
}
Teoretycznie powinno działać i wyrzucać login. Niestety w praktyce jest inaczej - nie wyświetla niczego. Poszczególne rekordy z tabeli to śmieci - nawet te, które powinny posiadać przypisaną literę.
W czym tkwi problem?
Pozdrawiam, boogi.

Re: Rozdzielanie wczytanych danych

Napisane: środa, 27 czerwca 2012, 15:11
przez Morfidon
Nie do końca rozumiem Twojego toku rozumowania w tym skrypcie.

Może lepiej spróbuj skorzystać z funkcji explode z PHP napisanej pod C++?
http://www.zedwood.com/article/106/cpp-explode-function

Re: Rozdzielanie wczytanych danych

Napisane: środa, 27 czerwca 2012, 16:25
przez boogi
Hmm to może wyjaśnię, bo zależy mi na tym kodzie:

Najpierw wczytuje zawartość pliku do tablicy zawartosc.

Potem w pierwszej pętli sprawdzam każdy rekord z tablicy po kolei i porównuje go jeśli będzie równy separatorowi czyli "$" zacząłem kolejną pętlę - przepisuję dotychczasowe rekordy z zawartosc do login (dlatego w pętli jest a-- -> cofam się od tego który będzie równy '$' do pierwszego).

Na końcu wyświetlam tablicę login, ktora powinna zawierać część tablicy zawartoscdo $.

No ale ... pustka :(

Re: Rozdzielanie wczytanych danych

Napisane: środa, 27 czerwca 2012, 19:37
przez Morfidon
Do tablicy jednoelementowej znaków wczytujesz wszystkie znaki z pliku... tu masz błąd.

Re: Rozdzielanie wczytanych danych

Napisane: środa, 27 czerwca 2012, 20:57
przez boogi
Masz rację, dzięki :)
Poniżej wklejam zmodyfikowany i działający kod:

Code: Zaznacz cały

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
	char zawartosc[999];
	char login[999];
	char separator(':');

	ifstream Plik;
	Plik.open("C:\\dane.ini");
	while(!Plik.eof())
	{
		Plik >> zawartosc;
	}
	Plik.close();

	string str_zawartosc = zawartosc;
	int rozmiar = str_zawartosc.length();

	for(int a = 0; a<=rozmiar; a++)
	{
		if(zawartosc[a] == separator)
		{
			for(int b = 0; b<a; b++)
			{
				cout<<zawartosc[b]; 
			}
			cout<<"\n";
			for(int c = a+1; c<rozmiar; c++)
			{
				cout<<zawartosc[c];
			}
		}
	}

	cin.get();
	return 0;
}
Można stworzyć tablice dynamiczne zamiast statycznych z 999 elementami, ale nie mam dzisiaj już do tego głowy.
Skompilowany program z pliku z zawartością

Code: Zaznacz cały

nickname$password
wyodrębni i wyświetli:
nickname
password

Pozdrawiam, boogi.