Zahl aus Bildfenstertitel auslesen

Bender25

Level-2
Beiträge
584
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.. Ich steh mal wieder vor einem Problem.

Ich möchte eine Art "Stellung" Nachfüren im Leitsystem einbauen.
Dazu öffne ich ein Bildfenster wo ich dann die Stellung Auf / Zu oder Ein / Aus des jeweiligen Objekts nachführen will..

Nun möchte ich aber dies nicht über den TagPrefix machen, da ich sonst für jedes Objekt eine Variable verwenden muß. Vielmehr möchte ich den Captiontext des Bildfenster setzen beim Bildaufruf und diesen dann wieder auslesen.

Problem ist wiederum nur das ich nicht nur die Nummer des Objekts in dieser Bildfensterüberschrift habe sondern noch eine Beschreibung des Objekts z.b. Schieber 213 oder Pumpe 12

mit der atoi funktion funktioniert es in sofern wenn ich nur die Nummer des Objekts in die Bildüberschrift setze.

Kennt jemand eine lösung mit der ich diese Zahl aus dem ganzen Char extrahieren kann?
 
Du könntest alle Zeichen überspringen, die keine Ziffern sind,
und dann erst atoi aufrufen:

Code:
char* skip_noint (char* str) { 
   while ((str*) &&  !isint(str*) ) str++;
   return str;
}
res=atoi(skip_int(zeile));
 
Vielen Dank für deine Hilfe.. Leider komm ich noch nicht ganz damit klar..:(
Könntest du vieleicht mal dazu schreiben was genau du machst? Bei mir kommen 5 fehler.
 
Und welche 5 sind das?

BTW: der obige Code ist nichts fertiges, sondern nur als Handlungsanleitung gedacht...


Das dachte ich mir schon. Hab das ganze auch mal für meinen Fall angepasst. Aber geht nicht.. deswegen wollte ich mal genau wissen wass du in der Zeile
char* skip_noint (char* str) {
while ((*str) && !isdigit(*str) ) str++;
return str;

genau machst
 
Das dachte ich mir schon. Hab das ganze auch mal für meinen Fall angepasst. Aber geht nicht.. deswegen wollte ich mal genau wissen wass du in der Zeile
char* skip_noint (char* str) {
while ((*str) && !isdigit(*str) ) str++;
return str;

genau machst

Die Funktion skip_noint bekommt einen Zeiger str, der sollte auf einen String wie "abC1234\000" zeigen. Die \000 steht für die 0 die das Ende markiert.
*str ist dasjenige Zeichen, auf das str zeigt (dessen Adresse in str gespeichert ist).
Die while Schleife setzt den Zeiger eins weiter, also nacheinander auf 'a', 'b','C' und '1'. Das weitersetzen geschieht durch erhöhen von str um 1 in der Anweisung str++
Sie tut das solange wie (*str!=0), das heißt das Ende ist noch nicht erreicht UND !isdigit(*str), das heißt (*str) ist keine Ziffer, wahr sind.
Zeigt der Zeiger schließlich auf eine Ziffer (hier auf die 1) liefert die Funktion diesen Zeiger zurück, mit return str .

Er zeigt nun auf die '1' in "abC1234\000" und wenn atoi ab dort auswertet, bekommt es nur "1234\000" zu sehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zu dem was Zottel gerade geschrieben hat, noch dieses:

Mag sein, dass es isdigit nicht fertig gibt.
Code:
int isdigit (char c) {
  return ((c>='0') && (c<='9'));
}
ist eine Variante, die bei ASCII-Kodierung funktionieren sollte.
 
Also.. Irgendwie bin ich völlig erfolglos... Habs mal angehängt was ich zusammen gebraut hab. Versteh es leider nichts ganz. :confused:

Wäre super wenn ihr mal einen Blick drauf werft. Zum testen von der ganzen Sache habe ich mir einfach mal einen Statischen Text sowie eine
EA Anzeige in WinCC angelegt und diese EA Anzeige versucht zu dynamisieren.
 

Anhänge

  • WinCC.JPG
    WinCC.JPG
    48,7 KB · Aufrufe: 7
Zuviel Werbung?
-> Hier kostenlos registrieren
So kann es nicht gehen. C kannt keine verschachtelten Funktionen (wie Pascal). Du mußt die Funktion skip_noint() außerhalb von (vor) main() deklarieren.

slip_noint() {
....
}

main () {
....
}
 
boah... jetzt steh ich voll auf dem Schlauch. :confused:

wie soll ich vor Main gehen?
Könnte halt eine Funktion einfügen und diese dann nach Main aufrufen. Aber kommt ja dann aufs gleiche raus..
 
boah... jetzt steh ich voll auf dem Schlauch. :confused:

wie soll ich vor Main gehen?
Könnte halt eine Funktion einfügen und diese dann nach Main aufrufen. Aber kommt ja dann aufs gleiche raus..

Eben nicht !

In C kannst Du innerhalb einer Funktion keine andere
definieren, nur außerhalb! Aufrufen geht aber dann doch.

Dh. Du definierst die Funktion vor main(), und in main() kannste
sie dann aufrufen...

Und gib Deiner Funktion noch einen Rückgabetyp,
etwa : char * funktionsname_weisichnichtmehr (char * str)...
sonst denkt der Compiler noch Du meinst int.

------------------------------------------------
Sei mir nicht böse, wenn ich noch eine Literaturempfehlung angebe,
es sieht so aus als hättest Du mit C noch nicht viel zu tun gehabt:
Kernighan/Ritchie: The C Programming Language (ANSI C)
Da steht sowas drin. Musst aber etwas Englisch können.
Das gibt es auch im Netz als PDF, einfach mal die große
Brillenschlange bemühen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Eben nicht !

In C kannst Du innerhalb einer Funktion keine andere
definieren, nur außerhalb! Aufrufen geht aber dann doch.

Dh. Du definierst die Funktion vor main(), und in main() kannste
sie dann aufrufen...

Und gib Deiner Funktion noch einen Rückgabetyp,
etwa : char * funktionsname_weisichnichtmehr (char * str)...
sonst denkt der Compiler noch Du meinst int.

------------------------------------------------
Sei mir nicht böse, wenn ich noch eine Literaturempfehlung angebe,
es sieht so aus als hättest Du mit C noch nicht viel zu tun gehabt:
Kernighan/Ritchie: The C Programming Language (ANSI C)
Da steht sowas drin. Musst aber etwas Englisch können.
Das gibt es auch im Netz als PDF, einfach mal die große
Brillenschlange bemühen.



Bin dir da natürlich nicht böse. Hab C nicht gelernt. Sondern alles im "Selbststudium" mit WinCC abgeschaut.


So hab die Funktion angelegt Compiliert mit 0 fehler und beim Testen WinCC abgeschossen. Ging kein Bildwechsel mehr. Irgendwie hängt der jetzt *g*
 
Zuletzt bearbeitet:
Zurück
Oben