Home › Forum › Informazioni ambiente di sviluppo LogicLab › Suggerimenti su come eseguire il parsing di una stringa
- Questo topic ha 1 risposta, 1 partecipante ed è stato aggiornato l'ultima volta 2 anni, 1 mese fa da Sergio Bertana.
-
AutorePost
-
Febbraio 25, 2022 alle 11:18 am #64020AnonimoInattivo
Qualche suggerimento su come parserizzare questa stringa?
01G01$1,0002,0,0,0,0,0,0#1,0001,0,0,0,0,0,0#1,000E,5,5,5,5,0,0#1,0004,0,0,0,0,0,0$71
Quello che dovrei ottenere è una cosa del tipo
1,0002,0,0,0,0,0,0
1,0001,0,0,0,0,0,0
1,000E,5,5,5,5,0,0
1,0004,0,0,0,0,0,0Per poi estrapolare
0002 e 0 per memorizzarli come 2 e 0
0001 e 0 per memorizzarli come 1 e 0
000E e 5 per memorizzarli come 14 e 5
0004 e 0 per memorizzarli come 4 e 0Stavo guardando tra le funzioni stringa ma qualche cosa che assomigli a un “substring” non lo trovo. Mi basta sapere qualche funzione stringa “avanzata”.
Febbraio 25, 2022 alle 11:23 am #64024Sergio BertanaAmministratore del forumProvo a buttare giù un’idea utilizzando lo funzioni SysStrFind e SysVsscanf. Ecco il programma StringParse, spero possa servire come base di partenza.
PROGRAM StringParse VAR Pos : @BYTE; (* Position *) Error : USINT; (* Error number *) SString : @STRING; (* Source string *) Value : ARRAY[0..3] OF USINT; (* Valiue *) END_VAR // ***************************************************************************** // PROGRAM "StringParse" // ***************************************************************************** // 01G01$1,0002,0,0,0,0,0,0#1,0001,0,0,0,0,0,0#1,000E,5,5,5,5,0,0#1,0004,0,0,0,0,0,0$71 // // Quello che dovrei ottenere è una cosa del tipo // 1,0002,0,0,0,0,0,0 // 1,0001,0,0,0,0,0,0 // 1,000E,5,5,5,5,0,0 // 1,0004,0,0,0,0,0,0 // // Per poi estrapolare // 0002 e 0 per memorizzarli come 2 e 0 // 0001 e 0 per memorizzarli come 1 e 0 // 000E e 5 per memorizzarli come 14 e 5 // 0004 e 0 per memorizzarli come 4 e 0 // ----------------------------------------------------------------------------- SString:=ADR('01G01$1,0002,0,0,0,0,0,0#1,0001,0,0,0,0,0,0#1,000E,5,5,5,5,0,0#1,0004,0,0,0,0,0,0$71'); //Source string // Cerco "$1," Pos:=SysStrFind(SString, ADR('$1,'), FIND_MODE#FIND_GET_END); //Position IF (Pos = eNULL) THEN Error:=10; RETURN; END_IF; IF NOT(SysVsscanf(Pos, ADR('%d'), USINT_TYPE, ADR(Value[0]))) THEN Error:=11; RETURN; END_IF; // Cerco successiva "," Pos:=SysStrFind(Pos, ADR(','), FIND_MODE#FIND_GET_END); //Position IF (Pos = eNULL) THEN Error:=20; RETURN; END_IF; IF NOT(SysVsscanf(Pos, ADR('%d'), USINT_TYPE, ADR(Value[1]))) THEN Error:=21; RETURN; END_IF; // Cerco "#1," Pos:=SysStrFind(SString, ADR('#1,'), FIND_MODE#FIND_GET_END); //Position IF (Pos = eNULL) THEN Error:=30; RETURN; END_IF; IF NOT(SysVsscanf(Pos, ADR('%d'), USINT_TYPE, ADR(Value[2]))) THEN Error:=31; RETURN; END_IF; // Cerco successiva "," Pos:=SysStrFind(Pos, ADR(','), FIND_MODE#FIND_GET_END); //Position IF (Pos = eNULL) THEN Error:=40; RETURN; END_IF; IF NOT(SysVsscanf(Pos, ADR('%d'), USINT_TYPE, ADR(Value[3]))) THEN Error:=41; RETURN; END_IF; // ... Eccetera // [End of file]
-
AutorePost
- Devi essere connesso per rispondere a questo topic.