Vanni78 Inserito: 8 novembre 2019 Segnala Share Inserito: 8 novembre 2019 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 More sharing options...
batta Inserita: 8 novembre 2019 Segnala Share Inserita: 8 novembre 2019 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 More sharing options...
Vanni78 Inserita: 11 novembre 2019 Autore Segnala Share Inserita: 11 novembre 2019 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 More sharing options...
batta Inserita: 11 novembre 2019 Segnala Share Inserita: 11 novembre 2019 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 More sharing options...
Vanni78 Inserita: 11 novembre 2019 Autore Segnala Share Inserita: 11 novembre 2019 "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 More sharing options...
batta Inserita: 11 novembre 2019 Segnala Share Inserita: 11 novembre 2019 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: 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 More sharing options...
Vanni78 Inserita: 11 novembre 2019 Autore Segnala Share Inserita: 11 novembre 2019 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora