4 problémy s mým programem – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

4 problémy s mým programem – C / C++ – Fórum – Programujte.com4 problémy s mým programem – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
MadmaX
~ Anonymní uživatel
10 příspěvků
30. 5. 2016   #1
-
0
-

   

//program má načítat ve streamu (LIVE) handy z PokerStars...
//vychází z log file.
//nejsem programátor, ale stále se učím! :-))
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>

using namespace std;

int main ()
{
	ifstream file;
	file.open("C:\\Users\\Marek Schwarz\\Desktop\\PokerStars.log.0");
	
	//NEJLÉPE, ABY TO OTEVÍRALO KOPII PRAVÉHO LOGU
	
	string search0 = "MSG_0x0009-T";
	string search1 = "MSG_0x0007-T";
	string bazal = "TableAnimation::dealPlayerCards";
	
	//nedulezite promenne
	string find0;
	string find1;
	string air; 
	
	//dulezite promenne
	string stack; //stack
	string bb; //bb
	string karta0; //hole find0
	string karta1; //hole find1
	string ID;
	
	string pomlcky = "------";
	string hvezdicky = "'*'";

	int lineCount;
	
		int i = 0;
		int c = 0;

while (!file.eof()){		//POTŘEBUJI UPRAVIT PODMÍNKU CYKLU, TAK ABY ...
while(file.good())			//VŽDY NAČETLO AKTUALIZOVANOU VERZI LOGU, ...
  {         				//LOG SE STÁLE DOPLŇUJE A POTŘEBUJI TO ...
	getline(file, air);		//AKTUALIZOVAT ZHRUBA 3x ZA VTEŘINU.
	++lineCount;
	
	if (air == bazal){		//vstupní podmínka, program má načítat ve streamu handy z pokerstars
		cout <<"Game no. ";	// počet string bazal = "TableAnimation::dealPlayerCards" se rovná reélnému počtu hand odehraných
		   				
		while (air != search0){				//kdyz se air nerovná MSG_0x0009-T, pustí to do cyklu
			file >> air;					//tyto podmínky načítají karty
			while(air == search0){
				file >> ID >> find0 >> find0; 
				
				if (find0 == pomlcky){
					while(air == search0){
						file >> air;
						while(air == search0){
							file >> find0 >> find0 >> find0;
							file >> karta0 >> find0 >> karta1;
							cout << ++i << ", ID " << ID << " holecards " << karta0 << karta1 ;						
						}	
					}
					break;
				}
								
				else{
				file >> karta0 >> find0 >> karta1;
				cout << ++i << ", ID " << ID << ", holecards " << karta0 << karta1 ;
				}
				break;
			}
	   }
	
		while (air != search1){			//kdyz se air nerovná MSG_0x0007-T, pustí to do cyklu
			file >> air;				////tyto podmínky načítají bb a stack
			while(air == search1){
				file >> find1 >> find1 >> find1 >> find1 >> find1 >> find1 >> find1;
				if(find1 == hvezdicky){
					file >> find1 >> find1 >> stack >> bb;
					cout <<  ", stack " << stack << ", bb " << bb << ", Radek " << lineCount << endl;
					break;
				}
				else{
					cout <<  ", stack NENACTEN " << ++c << ", bb " << 0 << ", Radek " << lineCount << endl;
					break;
					// TADY BYCH POTŘEBOVAL, ABY TO ZAČALO VYHLEDÁVAT SMĚREM NAHORU (což asi není možné)...
					// A NAŠLO PRVNÍ string hvezdicky = "'*'", POTÉ BYCH SI UŽ PORADIL, A JESTLI BY TO NEBYLO...
					// MOŽNÉ, TAK ABY TO NAČETLO PŘEDCHOZÍ lineCount A POTÉ HLEDALO V ROZMEZÍ lineCount-1 PO...
					// lineCount (SAMOZŘEJMĚ, ŽE BYCH TO DAL DO NĚJÁKÉHO POLE, ZE KTERÉHO BYCH NAČETL PŘEDCHOZÍ)...
					// lineCount.
					
					// DÁLE BY MĚ ZAJÍMALO, PROČ KDYŽ ODDĚLÁM: ...
					/*	
						cout <<  ", stack NENACTEN " << ++c << ", bb " << 0 << ", Radek " << lineCount << endl; 
						break;
					*/
					// TAK TO ZOBRAZÍ JEN 156 hand NAROZDÍL OD PŮVODNÍCH 267.
					// SPRÁVNĚ JICH MÁ BÝT 279. KDYŽ ODDĚLÁM I VŠECHNY PODMÍNKY NAČÍTÁNÍ KARET, STACKU A BB...
					// TAK TO ZOBRAZÍ PŘESNĚ 279 HAND, COŽ JE S MÝM MOMENTÁLNÍM C++ UMEM NAD VRCHOLY MÉHO CHÁPÁNÍ :-(.
				}
			}
			
	   }	   				
}
}
}
return 0;
}

//DÍKY MOC ZA KAŽDÝ TIP, JAK TO UDĚLAT LÉPE :-))
Nahlásit jako SPAM
IP: 94.74.242.–
Reklama
Reklama
JoDiK
~ Anonymní uživatel
981 příspěvků
30. 5. 2016   #2
-
0
-


//DÍKY MOC ZA KAŽDÝ TIP, JAK TO UDĚLAT LÉPE :-))
 

Každý tip? Tipuju, že si myslíš, že ti tenhle program umožní přijít k penězům snadno a bez práce. Věř mi, tudy cesta nevede.

Pokud to máš jako programátorské cvičení, tak těžko radit, když nedodáš příklad toho logu...

Nahlásit jako SPAM
IP: 88.103.228.–
KIIV+42
God of flame
30. 5. 2016   #3
-
0
-

* Hledani aktualniho logu - asi podle casu posledniho zapisu/zmeny. Zjistit obsah adresare a pouzit neco jako fstat. Nove radky asi podle predchozi a aktualni velikosti, pujde to nacist najednou, pak jen rozparsovat na radky. Dejme tomu ze si to muzes vkladat do vectoru ci zasobniku.

Az ti bude fungovat toto, tak muzes uvazovat o necem dalsim.

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
peter
~ Anonymní uživatel
2547 příspěvků
30. 5. 2016   #4
-
0
-

Odladil bych kazdou cast zvlast.
Ten soubor bys mohl poskytnout diskutujicim, nekde treba pres ulozto.
Mozna bych pouzil parser / tokenizer.
Jestli lze hledat dopredu, dozadu, to samozrejme lze.

while (air != search1)
A co kdyz tam zadne search1 nebude? Tak se to zacykli?

Pridal bych tam prodlevu po zpracovani posledniho radku.

http://codereview.stackexchange.com/questions/38879/parsing-text-file-in-c
To mi prijde teda prehlednejsi nez s tvymi while cykly.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:908:ef2...–
hlucheucho+10
Posthunter
30. 5. 2016   #5
-
0
-

Možná hloupá otázka: Nebylo by lepší logovat do databáze a veškerá řazení provádět v databázi?

hu

Nahlásit jako SPAM
IP: 195.178.67.–
MadmaX
~ Anonymní uživatel
10 příspěvků
30. 5. 2016   #6
-
0
-

Tak díky moc za všechny rady... Už to mám, nenačetlo mi to sice 12 hand z 279, ale to není moc velká ztráta, i když vůbec nechápu, proč úplně zmizely ve výstupu...

Teď už potřebuji jen, aby to jelo ve streamu a to nechápu jak to udělat... Když dám podmínku, aby to neukončovalo eof a aby se to stále načítalo, zkopíruju polovinu toho textáku na konec a uložím, tak to samozřejmě nenačte nic... tak to něják stále otvírat a pamatovat si číslo řádku na kterým to skončilo nebo nevím :-))

Nahlásit jako SPAM
IP: 94.74.242.–
peter
~ Anonymní uživatel
2547 příspěvků
31. 5. 2016   #7
-
0
-

Cislo radku? Nee, pozici v souboru.
Kdybys sem dal link na ten soubor (treba ulozit na ulozto.cz, uschovna nebo jinam), tak si s tim treba nekdo pohraje a udela lepsi parser. Ten tvuj zpusob mi prijde dost divny.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:502:c45...–
MadmaX
~ Anonymní uživatel
10 příspěvků
31. 5. 2016   #8
-
0
-

To chápu, klidně bych za to nabídl i peníze, kdyby mi to někdo udělal, ale bohužel nemohu, kdyby se k PokerStars donesl můj log file s tím, že se snažím něco naprogramovat, tak bych měl okamžitě zmražený účet.

Poslední problém, který s tím mám je, že když hraji jen jeden stůl, tak to načítá vše 100% správně, ale jakmile hraji více stolů, nastává problém, když se rozdají karty na obou stolech v časovém intervalu cca 2 vteřiny. Samozřejmě je např. 2x string bazal = "TableAnimation::dealPlayerCards"; pod sebou a poté to načte jen jeden string search0 = "MSG_0x0009-T" a string search1 = "MSG_0x0007-T"; a ještě třeba rozhozeně, určitě by to byla pro někoho otázka 20 minut, jak to udělat, protože ty zprávy vypadají takhle (tučné jsou potřebné udaje k vytažení):

-> MSG_0x0009-T 2053523761 00080EFG
::: 10d
::: 8c

-> MSG_0x0007-T 2053523761 00080EFG
 'F' 65536
 'C' 20
 '*' 'E' 60, 500, 20, 1

nebo

-> MSG_0x0007-T 2053523761 00080EFG
 'F' 65536
 'C' 470

s tím, že ty čísla za MSG např. 2053523761 00080EFG značí vždy jeden stůl, kdyby byla jiná, tak to znamená, že je to jiný stůl

takže struktura při hraní jednoho stolu je standartní:

TableAnimation::dealPlayerCards

poté hned první  > MSG_0x0009-T, kde jsou pod tím karty za těma :::

poté hned další -> MSG_0x0007-T, odkud načtu velikosti stacků a velikost bigblindu, popř. výši callu, z čehož si mohu dopočítat stacky a bb.

Problémem je když zapnu dva a více stolů, poté je struktura logu špatná (dá se to obejít, tak, že budu vždy čekat a snažit se aby se nerozvávali karty na dvou stolech současně):

TableAnimation::dealPlayerCards //1

nepotřebný msg např. > MSG_0x0005-T, > MSG_0x0024-T, apod...

poté hned první  > MSG_0x0009-T, //1

a poté přijde např. další TableAnimation::dealPlayerCards //2 a pod tím poté hned druhy > MSG_0x0009-T, //2

a nyní třeba > MSG_0x0007-T od //1

Takže můj script načte TableAnimation::dealPlayerCards, a nyní hledá MSG_0x0009-T a poté  MSG_0x0007-T a přitom přeskočí druhý TableAnimation::dealPlayerCards a je to špatně...

Kdo mi s tímto pomůže, tak mu letí 500,- Kč na účet. :-)

Nahlásit jako SPAM
IP: 94.74.242.–
MadmaX
~ Anonymní uživatel
10 příspěvků
31. 5. 2016   #9
-
0
-

 tohle jsem zatím vytvořil :-)

//program má načítat ve streamu (LIVE) handy z PokerStars...
//vychází z log file.
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main ()
{
	ifstream file;
	file.open("C:\\Users\\Marek Schwarz\\Desktop\\PokerStars.log.0");
	
	string search0 = "MSG_0x0009-T";
	string search1 = "MSG_0x0007-T";
	string bazal = "TableAnimation::dealPlayerCards";
	//nedulezite promenne
	string find0, find1, air, air1;
	//dulezite promenne
	int stack, bb, tocall; 
	string karta0, karta1, ID;
	string pomlcky = "------";
	string hvezdicky = "'*'";
	string sipka = "<-";
	int i = 0;

while(file.good())
  {         			
	file >> air;
	if (air == bazal){		//vstupní podmínka, program má načítat ve streamu handy z pokerstars
		cout <<"Game no. ";	// počet string bazal = "TableAnimation::dealPlayerCards" se rovná reélnému počtu hand odehraných
		   				
		while (air != search0){				//kdyz se air nerovná MSG_0x0009-T, pustí to do cyklu
			file >> air;					//tyto podmínky načítají karty
			while(air == search0){
				file >> ID >> find0 >> find0; 
				
				if (find0 == pomlcky){
					while(air == search0){
						file >> air;
						while(air == search0){
							file >> find0 >> find0 >> find0;
							file >> karta0 >> find0 >> karta1;
							cout << ++i << ", ID " << ID << " holecards " << karta0 << karta1 ;						
						}	
					}
					break;
				}
				else{
				file >> karta0 >> find0 >> karta1;
				cout << ++i << ", ID " << ID << ", holecards " << karta0 << karta1 ;
				}
				break;
			}
	   }
	
		while (air != search1){			//kdyz se air nerovná MSG_0x0007-T, pustí to do cyklu
			file >> air;				////tyto podmínky načítají bb a stack
			while(air == search1){
				file >> find1 >> find1 >> find1 >> find1 >> find1 >> tocall >> find1;
				if(find1 == hvezdicky){
					file >> find1 >> find1 >> stack >> find1 >> bb;
					cout <<  ", stack " << stack << ", bb " << bb << endl;
					break;
				}
				else if(find1 == sipka){
						if (tocall < 1000){
							cout << ", tocall ";
							cout << tocall << ", bb " << bb << endl;
							break;
						}
						else{
							cout << ", without action\n";
							break;
						}
				}
			}
			
	   }	

	}
}

return 0;
}
Nahlásit jako SPAM
IP: 94.74.242.–
MadmaX
~ Anonymní uživatel
10 příspěvků
31. 5. 2016   #10
-
0
-

Část mého logu

https://ulozto.cz/x74FmVUi/log-file-txt

Nahlásit jako SPAM
IP: 94.74.242.–
MadmaX
~ Anonymní uživatel
10 příspěvků
31. 5. 2016   #11
-
0
-

#10 MadmaX
zrovna jsem bohužel vybral handy, kde nejsou údaje pro bb, který to nechává z předchozí handy v těchto příadech :) ale to je jedno :-)

Nahlásit jako SPAM
IP: 94.74.242.–
MadmaX
~ Anonymní uživatel
10 příspěvků
31. 5. 2016   #12
-
0
-

když si to uvědomuji, tak by to bylo nejlepší udělat v sharpu, protože to stejně budu chtít dát do WPF :D

Nahlásit jako SPAM
IP: 94.74.242.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 104 hostů

Podobná vlákna

Pomoc s programem — založil Zugi

Pomoc s programem v C — založil Radyon

Problém s programem — založil Straider

Pomoc s programem ... — založil Bublina

Pomoc s programem — založil undatra

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý