wie kann ich Zahlen im Zeiger (Hilfszeiger) auslesen



  • 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 😕 😮 🙄 😮 😕


Anmelden zum Antworten