Jump to content
PLC Forum


Sign in to follow this  
Vanni78

Copia stringa di un array

Recommended Posts

Vanni78

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 

 

     

Share this post


Link to post
Share on other sites

batta

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

Share this post


Link to post
Share on other sites
Vanni78

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].

 

 

 

Share this post


Link to post
Share on other sites
batta

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];

Share this post


Link to post
Share on other sites
Vanni78

   "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? 

Share this post


Link to post
Share on other sites
batta

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?

 

Share this post


Link to post
Share on other sites
Vanni78

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...  

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...