Vai al contenuto
PLC Forum


Copia stringa di un array


Vanni78

Messaggi consigliati

Buonasera, probabilmente mi sto perdendo in un bicchiere d'acqua...cioè più che perdermi, ci sto affogando!

 

Ho un DB, composto da un array di 100 UDT, nel quale, oltre a byte, bool, int, c'è anche una stringa da 52 caratteri 

    db_lista.articolo[1].descrizione[1]

    db_lista.articolo[1].descrizione[2]

    ....

    db_lista.articolo[1].descrizione[254]

 

Devo riordinare la lista, quindi spostare i campi INT, i campi BOOL, i BYTE, ecc...e fin qui tutto ok.

Il problema è copiare tutta la stringa da un indice all'altro.

Premetto che sto usando SCL e che l'inserimento di un nuovo 'articolo' riesco a farlo tranquillamente

            temp_text := '$20'; 
                FOR t:=1 TO descrizione DO
                    IF t=1 THEN
                        temp_text:= BYTE_TO_CHAR (DB_lista.pktDescrizione[t]);  
                    ELSE   
                        temp_text:=CONCAT (in1 :=temp_text, in2 := BYTE_TO_CHAR (DB_lista.pktDescrizione[t])); 
                    END_IF;
                END_FOR;

ma in questo caso non vado a pescare in un array, ma un array.

Dovrei puntare in un campo preciso dell'array...

C'é una funzione di sistema?

Sicuramente sarà una banalità, ma oggi pecco di resilienza, ed ho scritto!

Grazie anticipatamente

Buon venerdì sera 

 

     

Link al commento
Condividi su altri siti


Non ho capito praticamente nulla.
Però non capisco come possa esistere db_lista.articolo[1].descrizione[254] se la stringa è di 52 caratteri.

Link al commento
Condividi su altri siti

Buongiorno Batta, grazie per la risposta

Ho sbagliato a scrivere il messaggio, 'descrizione' e' di 52 caratteri.

Mi spiego meglio.

Non riesco a copiare la descrizione di un articolo da un indice all'altro.

esempio:

copiare 'db_lista.articolo[10].descrizione' in 'db_lista.articolo[11].descrizione', e 'descrizione' e' dichiarato STRING[52].

 

 

 

Link al commento
Condividi su altri siti

Se le variabili hanno lo stesso formato, ti basta scrivere:

"db_lista".articolo[11].descrizione := "db_lista".articolo[10].descrizione;

 

Con un'unica istruzione puoi copiare anche tutta l'intera struttura. Non c'è bisogno di copiare una variable alla volta.

Esempio:

MyStruct[11] := MyStruct[10];

Link al commento
Condividi su altri siti

   "db_lista".articolo[11].descrizione := "db_lista".articolo[10].descrizione;

E' la prima cosa che ho scritto, ma non funziona.

Invece, se scrivo

   "db_lista".articolo[11] := "db_lista".articolo[10];

funziona tutto, senza alcun problema.

 

Il problema potrebbe essere legato ai primi 2 byte della stringa, len max string e len string? 

Link al commento
Condividi su altri siti

Io ho provato. Ho creato un array di struct, dove nella struttura ho messo una variabile INT e una variabile STRING[52].

Questo è il risultato:

 

image.png.6141f4b2fb7d6702a8a80fea3d0ba836.png

 

Del resto, non avevo dubbi.

Sicuro che non stai commettendo uno di quei classici errori, tanto banali, che ce l'hai lì sotto il naso, e non riesci a vederlo?

 

Link al commento
Condividi su altri siti

Non so se con Tia cambi qualcosa...questa e' la mia stupidissima fc

 

FUNCTION fc186: void

TITLE = 'FC_stringCopy';
   
    DB_listaStringa.articoloLottoNuovo[1].descrizione :=DB_listaStringa.articoloLottoNuovo[2].descrizione;       // non copio la descrizione
    DB_listaStringa.articoloLottoNuovo[3] :=DB_listaStringa.articoloLottoNuovo[4];          // copio tutto tranquillamente, descrizione compresa          
END_FUNCTION


Ho provato a forzare i valori dei 2 byte antecedenti al primo byte della stringa (sotto riporto la VAT), e così funziona

 

DB185.DBB  104                                                                                              DEC                  52    lunghezza massima stringa
DB185.DBB  105                                                                                              DEC                  52    lunghezza stringa
DB185.DBB  106    "DB_listaStringa".articoloLottoNuovo[2].descrizione[1]    CARATTERE    'A'

DB185.DBB  107    "DB_listaStringa".articoloLottoNuovo[2].descrizione[2]    CARATTERE    'B'
..    

37 minuti fa, batta ha scritto:

Sicuro che non stai commettendo uno di quei classici errori, tanto banali, che ce l'hai lì sotto il naso, e non riesci a vederlo?

Capita...ma mi sembra talmente banale che mi viene da dire che sbaglio proprio approccio...  

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...