wie kann ich Zahlen im Zeiger (Hilfszeiger) auslesen
-
Hallo ich habe folgenden Zeiger (Siehe Anhang)http://s6.bilder-hosting.de/img/LF9YV.png in ihm sthen die Werte die zur weiteren bearbeitung auslesen möchte. Wie oder mit wlecher funktion kann ich dies tun.
ich möchte die Werte 1; AP2; vBYA1; bBXBA12; PVO auslesen und dann mit anderen Werten aus einen anderen Zeiger Vergleichen und dann um 1 erhöhen.
-
zeig einfach den dummen Code ... was bringt uns so nen screeny ...
-
(D)Evil schrieb:
zeig einfach den dummen Code ... was bringt uns so nen screeny ...
ok hier ist der code
bool DekodiereVerdrahtung( char *SegmentPuffer,VERDRAHTENSCHALTEN *LokZeiger, bool isMultipleMakro, int LinienNummer, HGLOBAL BlockNummernPaarSpeicher) { char HilfsPuffer[12]; char *HilfsZeiger; int WertPos,i; char VerdrKennungen [10] [3]; BausteinNummernSpeicher *ZeigerBSNPS; strcpy(VerdrKennungen [0], TEXT("Nr")); strcpy(VerdrKennungen [1], TEXT("AP")); strcpy(VerdrKennungen [2], TEXT("vB")); strcpy(VerdrKennungen [3], TEXT("bB")); strcpy(VerdrKennungen [4], TEXT("PV")); strcpy(VerdrKennungen [5], TEXT("VP")); for (i = 0; i < 6; i++) { if (SucheString(SegmentPuffer,VerdrKennungen[i],&WertPos)) { HilfsZeiger = SegmentPuffer + WertPos; switch(i) { case 0 : { if (!isMultipleMakro) { (*LokZeiger).aktuelleLinie.LinieNr = atoi(HilfsZeiger); } else (*LokZeiger).aktuelleLinie.LinieNr = LinienNummer; }; case 1 : { (*LokZeiger).aktuelleLinie.AnzahlPunkte = 0; // warum wird AP auf 0 gesetzt obwohl Daten in Datei stehen? break; }; case 2 : { /*if (isMultipleMakro) { ZeigerBSNPS = (BausteinNummernSpeicher *) GlobalLock(*BlockNummernPaarSpeicher); if (NULL == ZeigerBSNPS) return false; GlobalUnlock(BlockNummernPaarSpeicher); }*/ schneideString(HilfsZeiger,&(*LokZeiger).aktuelleLinie.vonBlock[0]); break; }; case 3 : { /*if (isMultipleMakro) { ZeigerBSNPS = (BausteinNummernSpeicher *) GlobalLock(*BlockNummernPaarSpeicher); if (NULL == ZeigerBSNPS) return false; GlobalUnlock(BlockNummernPaarSpeicher); }*/ schneideString(HilfsZeiger,&(*LokZeiger).aktuelleLinie.bisBlock[0]); break; }; case 4 : { if ((*(HilfsZeiger)) == '0') (*LokZeiger).aktuelleLinie.PunktVerknuepft = FALSE; else (*LokZeiger).aktuelleLinie.PunktVerknuepft = TRUE; break; }; case 5 : { if ((*LokZeiger).aktuelleLinie.PunktVerknuepft) { schneideString(HilfsZeiger,&HilfsPuffer[0]); (*LokZeiger).aktuelleLinie.VerknuepfterPunkt = WandleInIntUm(&HilfsPuffer[0]); }; break; }; }; }; }; return TRUE; };
-
auauauauweh, grausamer code.
was meinst du mit "auslesen"? das ist ein zeiger, dereferenziere ihn, dann haste (in dem fall) ein char.
?
nix-globb.
-
Aus den 2 Werten vBYA1; bBXBA12 möchte ich die Zahlen auslesen. also die 1 und die 12. und noch an welcher stelle die Zahlen standen.
-
Ok, also du willst einen String parsen.
Naja, dann musst du den String eben parsen.Wenn du wissen willst wie das geht bzw. Hilfe haben willst müsstest du uns aber schon verraten wie die Grammatik dieser Strings aussieht.
Könnte ja vieles sein.Ich nehme mal an die einzelnen Felder sind immer mit ";" getrennt. Aber kommen die beiden Zahlen die du suchst immer im 3. und 4. Felder vor? Und sind das immer die einzigen Zahlen da drin, oder fangen die immer an einer fixen Position an und gehen dann bis zum Ende oder wie?
Wir können ja hier nicht hellsehen, und solange niemand das Format dieser Strings erkennt (falls es irgendeinem Standard entsprechen sollte den auch irgendwer ausser dir kennt) ... werden wir dir wohl nicht helfen können.
-
wie parse ich den den String.
Die werte sind durch ein ; getrennt (ist im 1 Thread nen Bild)(AP2;YBYA1:bBXB12;PVO)
so sieht es im Zeiger aus.und es verändern sich nur die Zahlen.
AP...;XBYA...;bBXB...;PV... die Buchstaben bleiben immer gleich.Wie kriege ich diese Zahl dann in eine int Variable, weil ich damit was überprüfen will und gegebenfalls die Zahl druch einen andere ersetzen muss
-
Bard00 schrieb:
Wie kriege ich diese Zahl dann in eine int Variable
Meine Güte. Such nach ";YBYA", geh von da aus 5 Zeichen weiter (denn so lang ist dein Suchstring), und wende atoi an. Für die andere Zahl analog.
-
MFK schrieb:
Bard00 schrieb:
Wie kriege ich diese Zahl dann in eine int Variable
Meine Güte. Such nach ";YBYA", geh von da aus 5 Zeichen weiter (denn so lang ist dein Suchstring), und wende atoi an. Für die andere Zahl analog.
Es funzt aber bei mir nicht.
Fehlermeldung: 'int' kann nicht in 'char *' konvertiert werden
-
Bard00 schrieb:
Fehlermeldung: 'int' kann nicht in 'char *' konvertiert werden
Der Code dazu wäre natürlich hilfreich gewesen. Meine Glaskugel ist in der anderen Hose

-
so sieht mein quellcode jetzt aus
BausteinNummernSpeicher *Zeiger; char* Zahl; int alteBsNr; char Wert; Zeiger = (BausteinNummernSpeicher *) GlobalLock(Speicher); if (NULL == Zeiger) return false; while(((*Hilfszeiger) != ';') && ((*Hilfszeiger) != '!')) { (*Output) = (*Hilfszeiger); if (isdigit(Hilfszeiger[0])) { Wert = Hilfszeiger[0]; strcpy(Zahl,Hilfszeiger[0]); strcat(Zahl,"\0"); char* puffer = _atoi(Zahl); } Output ++; Hilfszeiger ++; }; (*Output) = '\0'; GlobalUnlock(Speicher); return true;im Hilfszeiger sieht es so aus
"0x0012f279 "1;AP2;YBYA1:bBXB12;PVO!"
-
int alteBsNr = atoi( strstr( Hilfszeiger, ";YBYA" ) + 5 );Fertig.
(Wenn du sicherstellen kannst, dass der Suchstring immer drin ist)
-
MFK schrieb:
int alteBsNr = atoi( strstr( Hilfszeiger, ";YBYA" ) + 5 );Fertig.
(Wenn du sicherstellen kannst, dass der Suchstring immer drin ist)
Hallo ich danke dir aber was ist wenn im String zb ";YBYA34" steht wie bekomme ich da die 34 raus denn die zahl 34 bestht ja dann aus der 5 und 6 Stelle?
oder die zahl 134 diese besteht ja dann aus der 5 und 6 und7 stelle.
-
ich würde so vorgehen
- deinen kompletten String in einzelne String zerlegen mit Hilfe von der Funktion strtok und ";" als Separator
- jeden Stringzerlegen in zwei Strings: buschtabe und Zahl mit wieder der Funktion strtok , dieses mal mit "0123456789" als separator.
- zahl konvertieren mit atoi
-
mein Vorschlag:
/* ich möchte die Werte 1; AP2; vBYA1; bBXBA12; PVO auslesen Die werte sind durch ein ; getrennt (ist im 1 Thread nen Bild) (AP2;YBYA1:bBXB12;PVO) so sieht es im Zeiger aus. und es verändern sich nur die Zahlen. AP...;XBYA...;bBXB...;PV... die Buchstaben bleiben immer gleich. */ #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char* hilfezeiger = "AP2;YBYA1;bBXB12;PV0"; char string[30]; char seps[] = "0123456789";// Delimit char seps1[] = ";";// Delimit int zahlen[4]; char* einzelneString[4]; char zahl[3]; char string2[10]; char * buschtaben; int gelseneZeichen = 0; int i = 0; strcpy(string,hilfezeiger); // warum stürtzt das programm ab ohne strcpy /*Each call modifies strToken by substituting a NULL character for each delimiter that is encountered.*/ // kann hilfezeiger geändert werden ??? einzelneString[0] = strtok( string, seps1 ); // erste einzelstring lesen gelseneZeichen = strlen(einzelneString[0])+1; printf("einzelne String:%s\n",einzelneString[0]); strcpy(string2,einzelneString[0]); buschtaben = strtok( string2, seps ); // erste teil (buschtaben aus dem einzelstring) printf("Buschtabe:%s\n",buschtaben ); strcpy(zahl,einzelneString[0]+strlen(buschtaben)); // zweite teil (zahl) aus dem einzelstring lesen zahlen[0] = atoi(zahl); printf("zahl:%d\n",zahlen[0] ); while (gelseneZeichen < strlen(hilfezeiger)) // solang der String nocht nicht komplett gelesen ist { strcpy(string,hilfezeiger+ gelseneZeichen ); einzelneString[i+1] = strtok( string, seps1 ); // eizelne string lesen gelseneZeichen += strlen(einzelneString[i+1])+1; printf("einzelne String:%s\n",einzelneString[i+1]); strcpy(string2,einzelneString[i+1]); buschtaben = strtok( string2, seps ); // erste teil (buschtaben aus dem einzelstring) printf("Bischtabe:%s\n",buschtaben ); strcpy(zahl,einzelneString[i+1]+strlen(buschtaben)); // zweite teil (zahl) aus dem einzelstring lesen zahlen[i+1] = atoi(zahl); printf("zahl:%d\n",zahlen[i+1] ); i++; } return 0; }das Programm habe ich jetzt auf die schnelle gemacht und könnte ien poaar schwatstellen haben
ich freue mich auf eure Anmerkungen.
-
Ich frage mich die ganze Zeit, was das mit C++ und MFC zu tun hat
