* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 19, 2024, 04:20:48 pm

Inserisci il nome utente, la password e la durata della sessione.

388 Visitatori, 1 Utente

Autore Topic: Lettura file con Encoding ANSI  (Letto 5546 volte)

ottavio8

  • Newbie
  • *
  • Post: 24
  • Karma: +0/-0
Lettura file con Encoding ANSI
« il: Settembre 07, 2016, 12:50:06 am »
Ciao a tutti,
ho il seguente problema ho dei file .dat con encoding ANSI.
Quando cerco di leggere quello che c'è dentro mi va in eccezione.

Codice: [Seleziona]
  
   ASSIGN(OP,'C:\LIC\NOMEOP.dat');
    RESET(OP);
    READ(OP,operatore);
    CLOSE(OP);

Sulla riga  READ(OP,operatore); mi da eccezione di classe RunError(100)
In questo file c'è solo il record

Codice: [Seleziona]
  TYPE
    OPERATO=RECORD
    NOME:INTEGER;
  END; 

Ho fatto anche delle prove creando e popolando il file NOMEOP.dat da lazarus e il tutto funziona perchè il file creato non ha associata nessuna encoding riesco a leggere tranquillamente il contenuto.

La mia domanda è:
Come faccio a dire in pascal che il file che sto leggendo ha l'encoding ANSI?
In modo che interpreti bene il contenuto.
Oppure come faccio a convertire il file dalla codifica ANSi a nessuna codifica?

Per vedere la codifica ho usato Notepad++

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Lettura file con Encoding ANSI
« Risposta #1 il: Settembre 07, 2016, 03:11:24 pm »
Perdonami...
Stai cercando di leggere un "integer" come testo?

..
Prova ad usare uno stream :)

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Lettura file con Encoding ANSI
« Risposta #2 il: Settembre 07, 2016, 03:26:21 pm »
puoi allegare anche il codice lazarus con il quale crei il file .dat?
Imagination is more important than knowledge (A.Einstein)

ottavio8

  • Newbie
  • *
  • Post: 24
  • Karma: +0/-0
Re:Lettura file con Encoding ANSI
« Risposta #3 il: Settembre 08, 2016, 09:29:48 am »
Perdonami...
Stai cercando di leggere un "integer" come testo?

..
Prova ad usare uno stream :)

Stilgar

Ciao essendo nuovo di questo linguaggio. O meglio avendolo visto l'ultima volta nel 1991 mi manderesti un esempio di come fare la lettura con stream?
Grazie Ciao

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Lettura file con Encoding ANSI
« Risposta #4 il: Settembre 08, 2016, 09:39:21 am »
Codice: [Seleziona]
Readln (filedati,miastringa);
Miorecord.nome :=Strtoint (miastringa);
Sto scrivendo dal cellulare bloccato in tangenziale. Il codice potrebbe non compilare 😉
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

ottavio8

  • Newbie
  • *
  • Post: 24
  • Karma: +0/-0
Re:Lettura file con Encoding ANSI
« Risposta #5 il: Settembre 08, 2016, 09:40:58 am »
puoi allegare anche il codice lazarus con il quale crei il file .dat?

Ciao in allegato il sorgente che crea il file .dat e lo legge.
Facendolo da questo sorgente il tutto funziona perchè il file .dat aprendolo con notepad++ non ha nessuna codifica.
Mentre il file che devo leggere io viene creato da un file .pas eseguito con run file di lazarus che mette la codifica ansi al file .dat.
Ciao grazie per l'aiuto.

ottavio8

  • Newbie
  • *
  • Post: 24
  • Karma: +0/-0
Re:Lettura file con Encoding ANSI
« Risposta #6 il: Settembre 08, 2016, 10:35:36 am »
Codice: [Seleziona]
Readln (filedati,miastringa);
Miorecord.nome :=Strtoint (miastringa);
Sto scrivendo dal cellulare bloccato in tangenziale. Il codice potrebbe non compilare 😉


Codice: [Seleziona]
  TYPE
    OPERATO=RECORD
    NOME:INTEGER;
  END;

 OP:FILE OF OPERATO;

Ciao ho capito cosa vuoi dire tu ma io nel file .dat ho messo un record e d il file e del tipo del record.
Grazie per l'aiuto

SB

  • Scrittore
  • Sr. Member
  • *****
  • Post: 283
  • Karma: +1/-0
Re:Lettura file con Encoding ANSI
« Risposta #7 il: Settembre 08, 2016, 10:49:05 am »
L'errore 100 dice che stai leggendo oltre il limite del file.
Il programma si aspetta di trovare una sequenza di record formati da un campo di tipo intero (vedi a quanti byte corrisponde un integer per lazarus nel tuo sistema, 2 o 4?) Se nel sistema che genera il file gli interi hanno dimensioni diverse scatta l'errore...

Tra parentesi, non si assegna la codifica ad un file... Il file è una sequenza di byte che spetta a chi legge interpretare nel modo corretto

ottavio8

  • Newbie
  • *
  • Post: 24
  • Karma: +0/-0
Re:Lettura file con Encoding ANSI
« Risposta #8 il: Settembre 08, 2016, 11:16:24 am »
L'errore 100 dice che stai leggendo oltre il limite del file.
Il programma si aspetta di trovare una sequenza di record formati da un campo di tipo intero (vedi a quanti byte corrisponde un integer per lazarus nel tuo sistema, 2 o 4?) Se nel sistema che genera il file gli interi hanno dimensioni diverse scatta l'errore...

Tra parentesi, non si assegna la codifica ad un file... Il file è una sequenza di byte che spetta a chi legge interpretare nel modo corretto

Ciao come faccio a vedere che da quanti byte è composto l'integer?
Il file sono stati generati su xp
MA devono essere letti da windows 7 in su.
Grazie per la dritta.
Ciao


SB

  • Scrittore
  • Sr. Member
  • *****
  • Post: 283
  • Karma: +1/-0
Re:Lettura file con Encoding ANSI
« Risposta #9 il: Settembre 08, 2016, 11:31:18 am »
usa SizeOf() se sei tu a scrivere il programma per entrambi i sistemi (ma in questo caso sarebbe meglio dichiarare il tipo come longint piuttosto che integer in entrambi i programmi)
Se invece leggi un file generato da altri, puoi ad esempio guardare la dimensione in byte e dividere per il numero di record (brutale, ma efficace) Nel tuo caso direi che su xp gli interi sono a 2 byte.
Se l'errore è dovuto a questo, basta che nel tuo programma cambi il tipo da integer a smallint (2 byte, se leggi file di altri) o longint (4 byte preferibile, se scrivi tu i programmi) e dovrebbe funzionare.

Purtroppo ci sono vari problemi nel passare dati da un sistema all'altro e spesso è più conveniente lavorare sulla rappresentazione testuale dei numeri piuttosto che su quella binaria.


ottavio8

  • Newbie
  • *
  • Post: 24
  • Karma: +0/-0
Re:Lettura file con Encoding ANSI
« Risposta #10 il: Settembre 08, 2016, 11:44:42 am »
Grazie mille per la dritta i programmi li scrivo io quindi posso cambiare il tipo di dato.
Infatti ho messo smallint e adesso funziona non mi da + errore RunError(100).
Seguiro i tuoi preziosi consigli.
Grazie ancora.
Ciao

ottavio8

  • Newbie
  • *
  • Post: 24
  • Karma: +0/-0
Re:Lettura file con Encoding ANSI
« Risposta #11 il: Settembre 12, 2016, 03:40:23 pm »
usa SizeOf() se sei tu a scrivere il programma per entrambi i sistemi (ma in questo caso sarebbe meglio dichiarare il tipo come longint piuttosto che integer in entrambi i programmi)
Se invece leggi un file generato da altri, puoi ad esempio guardare la dimensione in byte e dividere per il numero di record (brutale, ma efficace) Nel tuo caso direi che su xp gli interi sono a 2 byte.
Se l'errore è dovuto a questo, basta che nel tuo programma cambi il tipo da integer a smallint (2 byte, se leggi file di altri) o longint (4 byte preferibile, se scrivi tu i programmi) e dovrebbe funzionare.

Purtroppo ci sono vari problemi nel passare dati da un sistema all'altro e spesso è più conveniente lavorare sulla rappresentazione testuale dei numeri piuttosto che su quella binaria.

Ciao, non ho capito bene questa tua frase:
"Se invece leggi un file generato da altri, puoi ad esempio guardare la dimensione in byte e dividere per il numero di record (brutale, ma efficace) Nel tuo caso direi che su xp gli interi sono a 2 byte."
Ho provato a dividere per 4 ma non mi ritrovo.
Allora l'intero che leggo ha dimensione 2 qual'è la divisione che dovrei fare?
Grazie ciao

SB

  • Scrittore
  • Sr. Member
  • *****
  • Post: 283
  • Karma: +1/-0
Re:Lettura file con Encoding ANSI
« Risposta #12 il: Settembre 18, 2016, 09:03:05 am »
Scusa il ritardo, mi era sfuggito l'intervento
Supponendo di aver memorizzato 5 interi, se la dimensione del file è 10 byte allora gli interi sono a 2 byte, se la dimensione del file è 20 byte allora gli interi sono a 4 byte.
Il file che avevi postato con 1 intero ha dimensione 2 byte

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18772
  • Topic in totale: 2233
  • Online Today: 578
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 1
Guests: 388
Total: 389

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.