Comma Seperated String zu Array

mv08

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

wie bekomme ich es hin einen String mit Komma Separierung in ein Array zu schreiben?

Ausgangswert:

'08.26.2013,10.17.10, 0.0000, KLTR/HR$R'

Zielvorstellung:
array[1] => 08.26.2013
array[2] => 10.17.10
.
.
.

Vielen Dank!

Dennis
 
Es gibt die String-Funktionen.
Damit kannst du nach dem Komma suchen (FIND), dann links davon den String kopieren (LEFT) und in dein Array schreiben.
Dann alles links vom Komma + Komma löschen (Delete).
Nun wieder nach dem Komma suchen usw. bis der String leer ist, bzw. die Suche kein Ergebnis liefert und der String eine bestimmte Länge unterschreitet.
 
Nein fertig habe ich nichts (Zumindest für Codesys nicht), aber das ist wirklich sehr einfach. Schau dir mal die Hilfe zu den genannten Stringfunktionen an.
Das ist auch ein klarer Fall für ST, gerade die Stringfuntionen sind da am Besten aufgehoben.

Ich hab gerade ein Siemens-Projekt offen, da hab ich so etwas zufällig auch drin, gelöst in SCL, also ähnlich dem Codesys-ST.
Mit Abweichungen bei den Paramtern sollte das dann so ähnlich auch für Codesys aussehen, das Array als "Empfänger" der Daten fehlt bei mit natürlich, da sind das Outputs.
Bei mir war der Inhalt des Files fest (Anzahl der Einträge), wenn das bei dir variabel oder sehr umfangreich ist, bietet sich zusammen mit deinem Array auch eine Schleife an.

Code:
FUNCTION_BLOCK FB7

Title = 'Auftrag'
//
// Auftragstrennung
// Zerlegung des Auftragsfiles vom PB2O
// in seine einzelnen Bestandteile
// Im File trennt ';' die 
// einzelnen Positionen voneinander
// 
Version : '1.0'
author  : Ralle
name    : AUFTRAG
family  : SYSTEM

VAR_INPUT
  // Eingangsparameter
  Auftrag: STRING[200];
END_VAR

VAR_OUTPUT // Ausgangsparameter
  Car_id_No: STRING[7];
  Kind_of_production: STRING[4];
  IO_Flag: STRING[2];
  Sachnummer: STRING[10];
  OPS_Kennung: STRING[3];
  Auftrag_Order_No: STRING[8];
  Part_Number_1: STRING[8];
  Part_Number_2: STRING[8];
  Part_Number_3: STRING[8];
  Part_Number_4: STRING[8];
  Part_Number_5: STRING[8];
  Part_Number_6: STRING[8];
  Part_Number_7: STRING[8];
  Part_Number_8: STRING[8];

END_VAR

VAR_TEMP
    // temporäre Variablen
  Pos: INT;
  SuchString: STRING;
  Length: INT;
END_VAR

// Anweisungsteil
SuchString := ';';
Length := 0;

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Car_id_No :=            MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Kind_of_production :=   MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
IO_Flag :=              MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Sachnummer :=       MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
OPS_Kennung :=     MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Auftrag_Order_No := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Part_Number_1 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Part_Number_2 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Part_Number_3 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Part_Number_4 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Part_Number_5 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Part_Number_6 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Part_Number_7 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

Pos :=                  FIND(IN1 := Auftrag, IN2 := SuchString);
Part_Number_8 := MID(IN := Auftrag ,L := Pos-1 ,P := 1);
Auftrag :=          DELETE(IN := Auftrag, L := Pos + Length, P := 1);

;
END_FUNCTION_BLOCK
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt auch noch die Möglichkeit mit einem Pointer durch den ganzen String durchzuwandern und die Kommas zu suchen. Dann kann man mit MID den Teilstring zw. 2 Kommas rauskopieren. Man spart sich halt die Löscherei und muss den String nur einmal durchsuchen.
 
Zurück
Oben