Step 7 Stringvariable mit Leerzeichen auffüllen

thomas1285

Level-1
Beiträge
16
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich bräuchte mal Hilfe.
Und zwar habe ich eine Stringvariable mit einer Länge von 128 Byte.
Jetzt wird dort ein Text reingeschrieben, der aber meistens kürzer als 128 Zeichen ist.
Nun möchte ich die restlichen Zeichen mit Leerzeichen auffüllen.

Gibt es da eine einfache Lösung?

Danke!

Mfg
Thomas
 
Du könntest die Stringvariable zuerst mit

Code:
myVar := '';

initialisieren und anschließend mit REPLACE (aus der Standardbibliothek) die Anzahl Zeichen auf die Variable schreiben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und zwar habe ich eine Stringvariable mit einer Länge von 128 Byte.
Jetzt wird dort ein Text reingeschrieben, der aber meistens kürzer als 128 Zeichen ist.
Nun möchte ich die restlichen Zeichen mit Leerzeichen auffüllen.
Wer schreibt da Text rein? Ein HMI oder Operator Panel oder ...?
Kann der/dasjenige nicht das zweite Byte im Stringkopf korrekt auf die tatsächliche Stringlänge setzen?
z.B. WinCC flexible macht das so und die Zeichen in der Stringvariable hinter dem Text werden nicht angezeigt.

Woher weiß Dein Programm, welches das letzte erwünschte Zeichen im Eingabestring ist bzw. ab welcher Position mit Leerzeichen aufgefüllt werden soll?
Wann soll aufgefüllt werden?

Oder ist Dein String in Wahrheit gar kein String (sondern z.B. ein CHAR-Array)?


Geht das ganze auch in AWL?
Die String-Funktionen aus der Standardbibliothek kann man auch in AWL aufrufen.
Wenn Du hinter die tatsächliche Stringlänge schreiben willst, dann ist CONCAT wohl besser geeignet.

Harald
 
Hallo,

ich bräuchte mal Hilfe.
Und zwar habe ich eine Stringvariable mit einer Länge von 128 Byte.
Jetzt wird dort ein Text reingeschrieben, der aber meistens kürzer als 128 Zeichen ist.
Nun möchte ich die restlichen Zeichen mit Leerzeichen auffüllen.

Gibt es da eine einfache Lösung?

Danke!

Mfg
Thomas


- Du besetzt deine Stringvariable stets mit Leerzeichen vor
- Wenn der Text reingeschrieben wird, werden dann die Leerzeichen einfach überschrieben, der Rest verbleibt so
- du kopierst dann deine Stringvariable an eine andere Stelle und machst damit, was auch immer du damit bezweckst
- deine Stringvariable muss dann sofort wieder mit den Leerzeichen vorbesetzt werden, ehe der nächste Text kommt
- Kommt der nächste Text, wiederholst du den Vorgang

Aber achte dabei auf die beiden Header-Bytes der Stringvariablen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich würde s wie folgt machen (das geht dann auch ganz gut mit AWL umzusetzen) :
- Du legst dir (quasi als Konstante) den mit 128 Leerzeichen aufgefüllten String in deiner SPS an.
- Du nimmst deinen Eingabestring und verbindest diesen mit dem Leerstring - mittels Concat.
- Nun schneidest du dir von dem so beu erzeugten (Temp-)String die linken 128 Zeichen mittels Left ab und überträgst die dorthin, wo du den "neuen" String verwenden möchtest.

Das Vorbelegen des Eingabestrings bring m.E. gar nichts, da der String durch eine Eingabe u.U. immer umformatiert werden würde.

Gruß
Larry
 
in AWL benutzt du einfach die SFC20 "BLOCKMOVE", um die Leerzeichen hineinzukopieren (von einer anderen Stelle, wo sie fest hinterlegt sind),
Vorsicht mit solchen komplizierten Tipps! Der TE wirkt nicht so, als ob er mit ANY-Pointern umgehen könnte.
Wenn man schon für STRING eigentlich ungeeignete Funktionen wie BLKMOV empfiehlt, dann besser SFC21 FILL.


Das Vorbelegen des Eingabestrings bring m.E. gar nichts, da der String durch eine Eingabe u.U. immer umformatiert werden würde.
Das denke ich auch. Deswegen meine Nachfragen gestern.

Vielleicht sollte man aber mit weiteren Vorschlägen besser warten, ob der TE sich nochmal meldet und genauer erklärt, was er warum tun will.


CONCAT beachtet bereits die maximale Länge des Zielstrings. Da braucht man normalerweise nicht mehr abschneiden.
Man kann an einen beliebig langen String mit CONCAT einen 128 Zeichen langen String anhängen - wenn der Zielstring max 128 Zeichen aufnehmen kann, dann ist das Ergebnis ein 128 Zeichen langer String.

Harald
 
Zuletzt bearbeitet:
CONCAT beachtet bereits die maximale Länge des Zielstrings. Da braucht man normalerweise nicht mehr abschneiden.
Man kann an einen beliebig langen String mit CONCAT einen 128 Zeichen langen String anhängen - wenn der Zielstring max 128 Zeichen aufnehmen kann, dann ist das Ergebnis ein 128 Zeichen langer String.

Hallo Harald,
Danke für den Hinweis - das hatte ich bislang noch nicht probiert (und wußte es somit auch noch nicht).
Die Frage ist allerdings, wie lange Siemens dies in dieser Form noch implementiert ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe am Wochenende nochmal ein bisschen drüber nachgedacht.
Jetzt hatte ich folgende Idee:

Der Text kommt ja aus einem WinCC und steht in einer Textvariable. In der S7 liegt das ganze in einem String[128].
Jetzt wollte ich diesen String mit Leerzeichen "initialisieren".
Dann kommt der Text aus dem WinCC in den String.
Und dann hatte ich die Idee, den String mit einem "Laufzeiger" zu durchlaufen, um dann die "0"-Zeichen wieder durch Leerzeichen zu ersetzen.

Was haltet ihr davon?
 
Zurück
Oben