Hurtigt spørgsmål....

Tags:    c++

<< < 12 > >>
hej allesammen.

Jeg har lavet en lille funktion der læser en fil og returnerer noget data, der sker dog en fejl i en lille test jeg har lavet:
Fold kodeboks ind/udKode 


Og min LGFReader.cpp
Fold kodeboks ind/udKode 


Fejlen er den snart meget kendte "Just-in-time-debugger" fra visual studio. (Som jeg iøvrigt ikke bruger...?!)

Har lært at fejlen kommer med en fejl i koden, men kan ikke finde den...

Håber i kan hjælpe!

EDIT:
Hov, glemte lige min test.lgf:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 17.03.2008 11:29 af Bruger #11328
Jeg tror at fejlen er her:
string products[] = {};
string prices[] = {};

Jeg ved ikke rigtigt hvad du forventer der skal ske i de linier.
Måske oprettes et array af string's med 0 elementer.
Du kunne måske bruge:
string products[10];
string prices[10];

Men bemærk at tallet 10 er tilfældigt valgt.

Du kunne også bruge:
std::vector<std::string > products;



Hmm, det jeg havde tænkt mig var et dynamisk array, som kunne blive ved med at blive loades i...

Men ok, fandt ud af det her:
Fold kodeboks ind/udKode 


Og det virker forholdsvist.
MEN den finder ikke min "product1" i min .lgf fil, som er noget i stil med:
Fold kodeboks ind/udKode 




Der er ikke dynamiske arrays i C++, man kan bruge std::vector, de virker på nogle punkter lige sådan.

Det er næppe en god ide at starte forfra med filen hver gang du kalder funktionen.

Denne konstruktion er næsten altid et dårlig tegn:
while(!LGFFile.eof())





1: Jeg bliver da nød til at starte forfra, da det skal være muligt at søge frem og tilbage i filen...
og hvorfor skulle while løkken være en fejl? end-of-file virker da godt?



Problemet med at åbne den hver gang du kalder LGFReader er at du så starter forfra og dermed finder det samme hver gang.

Nej, .eof() virker ikke godt, den returnerer først true når du har forsøgt at læse ud over filen, ikke når du er ved enden af filen. Det betyder at den efterfølgende getline kan fejle, fordi der ikke er mere i filen.

Det er bedre at bruge:

while(getline(LGFFile,line))
{





Ok!

Nå, men tilføjede lidt debugging, og fandt ud af at problemet bestod i SS, kan dog ikke fikse det, heller ikke med at tømme den (SS.str("");)
Fold kodeboks ind/udKode 


Returnerer:
Fold kodeboks ind/udKode 




hej allesammen.

Jeg har lavet en lille funktion der læser en fil og returnerer noget data, der sker dog en fejl i en lille test jeg har lavet:


Der er ingen grund til selv at parse din .ini fil. Der findes en "indbygget" funktionalitet til dette i Win32 API. See the snippets below.



GetPrivateProfileString
The GetPrivateProfileString function retrieves a string from the specified section in an initialization file. This function is provided for compatibility with 16-bit Windows-based applications. Win32-based applications should store initialization information in the registry.

DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // points to section name
LPCTSTR lpKeyName, // points to key name
LPCTSTR lpDefault, // points to default string
LPTSTR lpReturnedString, // points to destination buffer
DWORD nSize, // size of destination buffer
LPCTSTR lpFileName // points to initialization filename
);

WritePrivateProfileString
The WritePrivateProfileString function copies a string into the specified section of the specified initialization file.

This function is provided for compatibility with 16-bit Windows-based applications. WIn32-based applications should store initialization information in the registry.

BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // pointer to section name
LPCTSTR lpKeyName, // pointer to key name
LPCTSTR lpString, // pointer to string to add
LPCTSTR lpFileName // pointer to initialization filename
);





Det er ikke en .ini fil, men en .lgf (en extension jeg selv har fundet på..)



Det er ikke en .ini fil, men en .lgf (en extension jeg selv har fundet på..)


Metoderne WritePrivateProfileString() og GetPrivateProfileString() er ligeglad med navnet på filen eller filens extension, du skriver blot filnavnet. Sålænge strukturen i filen er overholdt. Strukturen for en .ini fil er som følger.

[Section1]
Key1=Value1
Key2=Value2
KeyN=ValueN

[Section2]
Key1=Value1
Key2=Value2
KeyN=ValueN

Du kan så selv vælge om du blot vil have en enkelt værdi eller et værdisæt som du senere selv parser.

[Section3]
Key1=(X, Y, Z)

Hth



Indlæg senest redigeret d. 28.03.2008 11:59 af Bruger #10448
Det er ikke en .ini fil, men en .lgf (en extension jeg selv har fundet på..)


Du kan også lave dit filformat, så det bliver et valid Xml format. Det vil sige dig mulighed for at anvende fx en alm DOM Xml parser.

<products>
<product0>Tony Hawk's Pro Skater 2</product0>
<price0>155</price0>
</products>




Indlæg senest redigeret d. 28.03.2008 12:12 af Bruger #10448
<< < 12 > >>
t