Esempio di codice per il comando Leggi riga

L'esempio di codice riportato di seguito deve essere immesso in modalità Comando della finestra di modifica e non all'interno della finestra di dialogo I/O file.

Nell'esempio riportato di seguito le righe di un file di dati vengono lette una alla volta finché il comando FILE/LEGGI RIGA non rileva una riga vuota. La routine di misurazione visualizza quindi il blocco di testo trovato e si chiude.

V1=FILE/ ESISTE,test.txt

IF/V1<>0

COMMENTO/OPER,Lettura da un file di dati possibile. Fare clic su OK per continuare.

ASSEGNA/V3 = ""

FPTR=FILE/APRI,D:\Programmi\pcdmis35\test.txt,LEGGI

DO/

V2=FILE/LEGGI RIGA,FPTR,{RIGA}

ASSEGNA/V3 = V3 + RIGA

COMMENTO/OPER,"Il valore effettivo della variabile è V3:

,V3

UNTIL/V2=="EOF"

FILE/CHIUDI,FPTR

COMMENTO/OPER,"Il blocco di testo contiene quanto segue: "

,V3

END_IF/

ELSE/

COMMENTO/OPER,Impossibile leggere da un file di dati. La routine si chiuderà.

GOTO/FINE

END ELSE/

FINE=ETICHETTA/

ROUTINE/FINE

Spiegazione del codice

Questo codice è molto simile a quello descritto in "Esempio di codice per il comando Leggi carattere". Le spiegazioni riportate di seguito riguardano soltanto la parte di codice specifica per questo esempio.

DO
Questa riga avvia un ciclo DO / UNTIL. A tale ciclo è associato il codice FILE/LEGGI RIGA in modo che le righe vengano lette una alla volta, continuativamente. Il ciclo viene interrotto quando viene raggiunta la fine del file.

V2=FILE/LEGGI RIGA,FPTR,{RIGA}
Questa riga legge il testo finché non viene rilevato un ritorno a capo. Anziché memorizzare il testo in V2, come FILE/LEGGI CARATTERE, questo codice prevede un funzionamento diverso.

ASSEGNA/V3 = V3+RIGA
Questa riga utilizza la variabile vuota V3 per concatenare la stringa V3 con RIGA, quindi riassegna il valore concatenato a V3. Quindi alle successive esecuzioni del ciclo DO/UNTIL, una o più righe saranno aggiunte a V3.

UNTIL/V2 == "EOF"
Questa riga verifica la condizione del ciclo DO/UNTIL. Quando il codice FILE/LEGGI RIGA raggiunge la fine del file, il ciclo viene interrotto. Quando il flusso della routine esce dal ciclo, viene interrotta l'esecuzione del codice rimanente e l'intero blocco di codice viene visualizzato in un commento per l'operatore.

Risultato = File/RLeggiLinea,F1, "ID pezzo:" + {V1} - Fa sì che il testo visualizzato sulla riga dopo il testo "ID pezzo:" sia assegnato a V1. La riga verrà letta dal file aperto utilizzando il puntatore del file F1. Il risultato dell'operazione di lettura (positivo o negativo) verrà memorizzato nella variabile Risultato.

File/RLeggiLinea,F1, "Posizione:"+{VARX}+ ","+{VARY}+ ","+{VARZ}+ ","+{VARI}+ ","+{VARJ}+ ","+{VARK}

ASSEGNA/CER1.XYZ = MPNT(VARX, VARY, VARZ)

ASSEGNA/CER1.IJK = MPNT(VARI, VARJ, VARK)

Le precedenti tre righe di comando leggono il testo delimitato da virgole dopo la stringa "Posizione:" e memorizzano i valori nei valori di CER1 X, Y, Z, e I, J, K.

File/LeggiLinea,F1, "Valore # " + varciclo + " : " + {var2} - Fa sì che var2 sia riempita con il testo presente dopo i due punti. In questo esempio, la variabile varciclo non è racchiusa tra parentesi graffe e viene considerata come testo di delimitazione.

Esempio di codice relativo a numeri contenenti zero iniziali

Se il file che si sta leggendo contiene righe di numeri, si noterà che i caratteri precedenti allo zero vengono ingnorati. Ad esempio, se una riga contiene il valore 005450, il valore viene letto come un numero e viene restituito il valore 5450, ignorando i due zero precedenti. Questa opzione può essere conservata o annullata.

Si supponga di avere un file di testo creato da un software lettore di codice a barre esterno e contenente due righe di dati:

290291143;582750;0010

291143;5827;0010

È possibile utilizzare un codice semplice come questo per ottenere i valori numerici tra i punti e virgola:

ASSEGNA/PRIMO_VALORE=0

ASSEGNA/SECONDO_VALORE=0

ASSEGNA/TERZO_VALORE=0

ASSEGNA/NUMRIGA=1

FPTR =FILE/APRI,D:\TEMP\CODES.TXT,LEGGI

DO/

INRIGA =FILE/LEGGIRIGA,FPTR,{PRIMO_VALORE}+";"+{SECONDO_VALORE}+";"+{TERZO_VALORE}

COMMENTO/OPER,NO,"NUMERO RIGA: " + NUMRIGA

,"Primo valore: " + PRIMO_VALORE

,"Secondo Valore: "+SECONDO_VALORE

,"Terzo Valore: "+TERZO_VALORE

UNTIL/INRIGA == "EOF"

FILE/CHIUDI,FPTR,MANTIENI

In questo modo, le righe del testo saranno correttamente analizzate e saranno restituiti i valori numeri, ma saranno anche rimossi tutti gli zero precedenti ai valori restituiti. Quindi, la variabile TERZO_VALORE conterrà il valore 10, anziché 0010.

Per conservare i valori degli zero iniziali, è necessario trattare l'intera riga come una stringa e utilizzare invece le funzioni di stringa INDICE, SINISTRA e MEDIO per individuare la posizione dei punti e virgola in una riga di testo e ottenere i valori numerici:

FPTR =FILE/APRI,D:\TEMP\CODES.TXT,LEGGI

ASSEGNA/NUMRIGA=1

DO/

STATORIGA =FILE/LEGGIRIGA,FPTR,{STRRIGA}

ASSIGN/LINESTR=STR(LINESTR)

ASSEGNA/PRIMO_INDICE=INDEX (LINESTR,";")

ASSIGN/FIRST_VALUE=STR(LEFT(LINESTR,FIRST_INDEX-1))

ASSIGN/REMAINSTR=STR(MID(LINESTR,(FIRST_INDEX)))

ASSEGNA/SECONDO_INDICE=INDEX (REMAINSTR,";")

ASSIGN/SECOND_VALUE=STR(LEFT(REMAINSTR,SECOND_INDEX-1))

ASSIGN/THIRD_VALUE=STR(MID(REMAINSTR,SECOND_INDEX))

COMMENTO/OPER,NO,"NUMERO RIGA: " + NUMRIGA

,"Primo valore: " + PRIMO_VALORE

,"Secondo Valore: "+SECONDO_VALORE

,"Terzo Valore: "+TERZO_VALORE

ASSEGNA/NUMRIGA=NUMRIGA+1

UNTIL/STATORIGA == "EOF"

FILE/CHIUDI,FPTR,MANTIENI

Spiegazione del codice

Questo codice è molto simile a quello descritto più sopra. Saranno elencate di seguito solo le spiegazioni del codice relative alle funzioni di stringa menzionate.

ASSEGNA/PRIMO_INDICE=INDEX (LINESTR,";")
Questa riga individua la posizione del primo punto e virgola sulla riga e lo assegna alla variabile PRIMO_INDICE

ASSIGN/FIRST_VALUE=STR(LEFT(LINESTR,FIRST_INDEX-1))
Questa riga assegna la variabile FIRST_VALUE alla stringa di caratteri fino al primo punto e virgola nella variabile LINESTR. LINESTR contiene l'intera riga di testo.

ASSIGN/REMAINSTR=STR(MID(LINESTR,(FIRST_INDEX)))
Questa riga assegna la variabile REMAINSTR ("remaining string", stringa rimanente) alla stringa di sinistra oltre i caratteri che iniziano alla posizione FIRST_INDEX (la posizione del primo punto e virgola) fino alla fine della riga.

ASSIGN/SECOND_INDEX=INDEX (REMAINSTR,";")
Questa riga cerca all'interno della variabile REMAINSTR un altro punto e virgola (il secondo sulla riga) e assegna la posizione alla variabile SECOND_INDEX.

ASSIGN/SECOND_VALUE=STR(LEFT(REMAINSTR,SECOND_INDEX-1))
Questa riga assegna la variabile SECOND_VALUE alla stringa di caratteri fino al primo punto e virgola nella variabile REMAINSTR (il secondo punto e virgola sull'intera riga).

ASSIGN/THIRD_VALUE=STR(MID(REMAINSTR,SECOND_INDEX))
Questa riga assegna la variabile THIRD_VALUE alla stringa di caratteri che inizia dalla posizione SECOND_INDEX fino alla fine della riga.