Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: Mefrio - 11 Luglio 2010, 18:29:17

Titolo: Gestire file di testo
Inserito da: Mefrio - 11 Luglio 2010, 18:29:17
Ragazzi mi sapete dire come sia possibile aprire un file di testo "x" e alla riga "y" cancellare ciò che c'è scritto per sostituirlo con un mio testo?
Titolo: Re: Gestire file di testo
Inserito da: doublemm - 11 Luglio 2010, 18:53:10
devi mettere il file in una stringa

Codice: [Seleziona]
DIM nomefile AS string

'inserisco il file nella stringa

nomefile = File.Load("percorso/nomefile")

poi in base al criterio che devi usare per cancellare la riga puoi splittare con la funzione SPLIT il file in un array e poi cancelli la posizione dell'array che contiene la riga da cancellare.
Titolo: Re: Gestire file di testo
Inserito da: Picavbg - 11 Luglio 2010, 22:59:23
Un file di testo é un file sequenziale e non é modificabile direttamente; occorre caricarlo tutto in memoria e riscriverlo con l'opzione "FOR CREATE". Perciò dopo averlo caricato in memoria con l'istruzione File.Load, occorre individuare il record "y" (quello che tu chiami la riga  "y", se non ho capito male). Ora però bisogna capire quale sia con sicurezza il record che tu cerchi per modificarlo.
Ne conosci con esattezza ed univocamente il contenuto, in modo da non sbagliare record?
Hai un campo di riferimento per la tua ricerca?
Conosci la sua posizione nel file (1°, 2°, ..., n°)?
Considerato tutto ciòi, secondo me, occorrerebbe che tu aggiunga qualche ulteriore dettaglio, per consigliarti in maniera mirata. Infatti non esiste una sola maniera per arrivare alla stessa soluzione.  :)
Titolo: Re: Gestire file di testo
Inserito da: Mefrio - 11 Luglio 2010, 23:24:23
conosco perfettamente il file che voglio modificare e non mi è chiaro cosa sia la funzione SPLIT! Per maggiori dettagli che intendi? Io non voglio fare altro che modificare una riga di un file testuale
Titolo: Re: Gestire file di testo
Inserito da: doublemm - 11 Luglio 2010, 23:39:57
SPLIT è quella funzione che permette di dividere una stringa in "sottostringhe" esempio

file testo.txt:
questa è
una prova

Codice: [Seleziona]
dim stringa as stringa
dim vettore as stringa[]

stringa = File.Load("percorso/testo.txt")

vettore=split(stringa,\n)



vettore[0]="questa è"
vettore[1]="una prova"

\n=lo usi per dire a plit di separare il testo dove c'è un ritorno a capo

per maggiori dettagli guarda qui http://gambasdoc.org/help/lang/split?it (http://gambasdoc.org/help/lang/split?it)
Titolo: Re: Gestire file di testo
Inserito da: Picavbg - 11 Luglio 2010, 23:51:30
conosco perfettamente il file che voglio modificare e non mi è chiaro cosa sia la funzione SPLIT! Per maggiori dettagli che intendi? Io non voglio fare altro che modificare una riga di un file testuale
Ho capito perfettamente quello che vuoi fare, ma, prima di darti un consiglio vorrei capire qual'é l'elemento del file testuale che ti permette di riconoscere la riga che vuoi modificare. I record del tuo file contengono un solo record per ciascuna riga o no? Se contengono una sola riga, immagino che vuoi rintracciare quella il cui contenuto, parziale o totale corrisponda alla tua stringa di ricerca.
La funzione split non é molto semplice da spiegare in poche righe, ma ti puo aiutare la lettura dell'articolo che ho scritto proprio su detto argomento nel numero 0 de "Il resto del pinguino". Dovendo poi eseguire anche un replace del contenuto dell'array che otterrai con la "Split", ti conviene leggere anche il successivo articolo sulla funzione "Replace", nel n.1 del nostro e-zine.
Aspetto di conoscere i chiarimenti che ti ho chiesto all'inizio del presente post. ;)
Ciao.
Titolo: Re: Gestire file di testo
Inserito da: Ceskho - 11 Luglio 2010, 23:53:53
Forse lo ripeterò fino alla mia ultima esalazione di vita ma spero possa entrare in testa che prima di aprire un topic bisogna usare la ricerca
Titolo: Re: Gestire file di testo
Inserito da: doublemm - 11 Luglio 2010, 23:58:03
Forse lo ripeterò fino alla mia ultima esalazione di vita ma spero possa entrare in testa che prima di aprire un topic bisogna usare la ricerca

concordo. Se cerchi l'avevano già spiegato a me come fare. Capisco anche che molte volte cercare possa essere anche un po noioso però aiuta. Succede spesso che mi blocco su qualcosa, chiedo aiuto e poi trovola soluzione prima della risposta :nonono:
Titolo: Re: Gestire file di testo
Inserito da: Picavbg - 12 Luglio 2010, 10:05:27
Quello che dice Ceskho é più che giusto, però può capitare benissimo che, nella ricerca, non sempre si riesca a trovare la parolina magica che permette l'intercettazione dell'argomento appropriato all'aiuto desiderato.
In ogni caso, prima di chiedere aiuto, occorre fare sempre qualche tentativo, magari comunicandolo poi nel post d'apertura di una discussione, facendo così capire di avere impiegato anche un pò di buona volontà. La ricerca di una soluzione può dare anche altri spunti per altre difficoltà ed aiutarci nella crescita. Magari alla fine la discussione bisognerà accenderla comunque, ma possono nel frattempo cambiare le impostazioni per la richiesta d'aiuto e la crescita può diventare comune.
 :)
Però, non t'intimidire, se hai bisogno chiedi pure. Che può succedere ..., al massimo non ti risponde nessuno.  :D
Ciao.
Titolo: Re: Gestire file di testo
Inserito da: doublemm - 12 Luglio 2010, 13:20:20
Citazione
Però, non t'intimidire, se hai bisogno chiedi pure. Che può succedere ..., al massimo non ti risponde nessuno.  Felice

Concordo (spero di non averti intimidito con  :nonono: voleva solo essere una cosa giocosa)  se hai bisogno sono anch'io a disposizione per quel poco che so.
Titolo: Re: Gestire file di testo
Inserito da: Mefrio - 12 Luglio 2010, 16:37:57
Citazione
Però, non t'intimidire, se hai bisogno chiedi pure. Che può succedere ..., al massimo non ti risponde nessuno.  Felice

Concordo (spero di non averti intimidito con  :nonono: voleva solo essere una cosa giocosa)  se hai bisogno sono anch'io a disposizione per quel poco che so.
no tranquillo Chesko me lo dice sempre di ricercare, anche se io non trovo mai quello che mi serve :D

@Picavbg
non ho capito cosa intendi per Record
Titolo: Re: Gestire file di testo
Inserito da: Picavbg - 13 Luglio 2010, 22:56:43
non ho capito cosa intendi per Record

Il termine "record" non é una mia invenzione. Nel linguaggio tecnico dei programmatori, come in tutti i linguaggi settoriali, professionali e non,  si usa una terminologia identificativa che, una volta imparata, permette di esprimersi in quel settore in maniera rapida e concisa. Come certamente saprai, i programmi leggono e scrivono dati in memorie esterne al programma, dette memorie di massa (http://it.wikipedia.org/wiki/Memoria_di_massa (http://it.wikipedia.org/wiki/Memoria_di_massa)). Esse sono costituite principalmente dal disco fisso del pc, ma anche da dischetti, pendrive, CD, DVD, ecc.
Ciascuno dei suddetti supporti é organizzato in segmenti logici dove risiedono i file-dati trattati dai programmi.
Il file-dati, chiamato semplicemente file, é l'insieme di  record, ciascuno costituito da uno o più componenti, chiamati campi.
Per fare un esempio pratico, possiamo paragonare il file ad un treno, i record costituiscono i vagoni al cui interno sono posizionate le poltroncine, cioé i campi dove fare sedere i passeggeri, cioé i dati. In ciascun vagone le poltroncine sono numerate, per Es. da 1 a 10. In ciascun vagone, alla poltroncina n.1 siede sempre un passseggero con le stesse caratteristiche (peso, altezza, magrezza, cioé numerico o alfabetico o alfanumerico o ...). Lo stesso vale per tutte le altre 9 poltroncine.

Nel caso dei file di testo, quelli con estensione .txt,  sono file, dove i dati possono essere formati da uno o più campi a seconda da come é stato pensato dal programmatore che lo ha generato. Nel caso di una file di testo di tipo documento, ciascun record può coincidere con una sola riga del documento, come può coincidere con un'intera pagina del documento stesso; in quest'ultimo caso un record conterrà tanti campi quante sono le righe che lo costituiscono, oppure può contenere un solo campo, ma la fine di ciascuna riga è contrassegnata da un carattere speciale (ritorno a capo) che permette il riconoscimento univoco dell'interruzione di riga.

Spero di avere risposto in maniera comprensibile alla tua domanda e di avere, allo stesso tempo, illustrato meglio il concetto di dettaglio relativamente ai record che costituiscono il tuo file. Perciò ora potresti confidarmi qual'é il numero di righe che compongono ciascun record del tuo file. Ciò é importante per usare o meno la funzione split.   :)

Ciao.

Titolo: Re: Gestire file di testo
Inserito da: fsurfing - 13 Luglio 2010, 23:03:29
io dopo una risposta del genere avrei preso il primo treno per un luogo di mare e al diavolo la programmazione!  :rotfl: :rotfl: :rotfl:
Titolo: Re: Gestire file di testo
Inserito da: leo72 - 13 Luglio 2010, 23:26:44
Invece ha dato un'ottima spiegazione  ;)
Titolo: Re: Gestire file di testo
Inserito da: Picavbg - 14 Luglio 2010, 09:15:17
@fsurfing :
Grazie per il consiglio, ma il mare ce l'ho sotto casa ed oggi l'ho guardato ed é proprio una favola. Lo andrò a visitare non appena avrò finito questo messaggio. Ecco, così ti faccio venire un pò di acquolina salata in bocca.  ;D ;D

@leo72 :
Grazie Leo, il tuo complimento mi rincuora.  8)

Ciao a tutti.
Titolo: Re: Gestire file di testo
Inserito da: md9327 - 16 Luglio 2010, 16:07:36
Perdonatemi se mi intrometto in questa bella discussione (non parlo tra fsurfing e cesko... :-) )...

Sò che manco da molto, ma passando per queste parti, dò un piccolo "spuntino" anche io...
A parte i miei complimenti a cesko per la sua "spremitura" di cervice, e dando del "cattivone" a fsurfing che lo tratta poverino sempre male... sigh..

SCHERZOOO! (e sono ot...)

Scherzi a parte, da quanto si capisce, l'amico Mefrio, vorrebbe modificare un particolare blocco di testo, sostituendolo con un'altro a sua scelta.
Due punti:
1) non è necessario caricare tutto il file in memoria, ma sicuramente deve essere letto tutto (questo con Gambas)
2) l'uso di "split" è abbastanza pesante, e comunque necessita di quattro operazioni (split, cerca testo, sostituisci testo, ricomponi riga)

un'altra ipotesi fattibile, così per aprire allargare la mente, potrebbe essere questa:

1) lettura, riga per riga, del file
2) se si conosce già la riga da modificare, basta contare le letture, e procedere alla fase 3
3) usare la funzione "replace" per sostituire il testo
4) salvare la riga su un secondo file, in modo che l'originale venga usato come TEMPLATE
5) salvare comunque tutte le righe lette sul TEMPLATE

Tutto quanto sopra fatto con Gambas. Ovviamente si potrebbe fare tramite comandi di s.o. (es. bash), e forse anche in modo più veloce, ma dipenden dai parametri che si hanno a disposizione.

Scappo e mi dileguo prima che mi "menate"...

Baci e abbracci
Titolo: Re: Gestire file di testo
Inserito da: Gusions - 25 Luglio 2010, 18:42:09
Perdonatemi se mi intrometto in questa bella discussione (non parlo tra fsurfing e cesko... :-) )...

Sò che manco da molto, ma passando per queste parti, dò un piccolo "spuntino" anche io...
A parte i miei complimenti a cesko per la sua "spremitura" di cervice, e dando del "cattivone" a fsurfing che lo tratta poverino sempre male... sigh..

SCHERZOOO! (e sono ot...)

Scherzi a parte, da quanto si capisce, l'amico Mefrio, vorrebbe modificare un particolare blocco di testo, sostituendolo con un'altro a sua scelta.
Due punti:
1) non è necessario caricare tutto il file in memoria, ma sicuramente deve essere letto tutto (questo con Gambas)
2) l'uso di "split" è abbastanza pesante, e comunque necessita di quattro operazioni (split, cerca testo, sostituisci testo, ricomponi riga)

un'altra ipotesi fattibile, così per aprire allargare la mente, potrebbe essere questa:

1) lettura, riga per riga, del file
2) se si conosce già la riga da modificare, basta contare le letture, e procedere alla fase 3
3) usare la funzione "replace" per sostituire il testo
4) salvare la riga su un secondo file, in modo che l'originale venga usato come TEMPLATE
5) salvare comunque tutte le righe lette sul TEMPLATE

Tutto quanto sopra fatto con Gambas. Ovviamente si potrebbe fare tramite comandi di s.o. (es. bash), e forse anche in modo più veloce, ma dipenden dai parametri che si hanno a disposizione.

Scappo e mi dileguo prima che mi "menate"...

Baci e abbracci

Ecco è quello che mi servirebbe a me, però ho fondamentalmente alcuni problemi:

* Devo modificare il file /debian/control che si ottiene debianizzando un sorgente, però nel form da me creato non c'è alcuna dirchooser e non so come collegarmi alla cartella. Form--> http://www.arresojas.it/wp-content/uploads/2010/07/Packages-Details_007.png. Praticamente dovrei sostituire quello che c'è dopo i due punti, con quello che immetto nella textbox.

Quello che hai prospettato è interessante, però non sono riuscito a realizzare nulla nemmeno in bash..
Titolo: Re: Gestire file di testo
Inserito da: md9327 - 26 Luglio 2010, 10:25:25
ehm... non ho capito... :-)

Mi spieghi meglio cosa intendi con "collegare la form ad una directory" ?
In gambas esiste il componente DirChooser, come anche il FileChooser ecc.
Quello che non capisco è cosa centra con la richiesta di base.
Puoi spiegare più chiaramente cosa vuoi fare, magari anche ad un livello generale?
Titolo: Re: Gestire file di testo
Inserito da: Gusions - 27 Luglio 2010, 01:01:18
ehm... non ho capito... :-)

Mi spieghi meglio cosa intendi con "collegare la form ad una directory" ?
In gambas esiste il componente DirChooser, come anche il FileChooser ecc.
Quello che non capisco è cosa centra con la richiesta di base.
Puoi spiegare più chiaramente cosa vuoi fare, magari anche ad un livello generale?

Ciao, scusami il ritardo.

Vorrei modificare il file /debian/control dall'interfaccia grafica da me creata, ma non avendo una dirchooser nel form non riesco ad entrare nella cartella selezionata. Il file è un file di testo, per questo mi interessa e riguarda il topic...
Titolo: Re: Gestire file di testo
Inserito da: Ceskho - 27 Luglio 2010, 09:09:35
ehm... non ho capito... :-)

Mi spieghi meglio cosa intendi con "collegare la form ad una directory" ?
In gambas esiste il componente DirChooser, come anche il FileChooser ecc.
Quello che non capisco è cosa centra con la richiesta di base.
Puoi spiegare più chiaramente cosa vuoi fare, magari anche ad un livello generale?

Ciao, scusami il ritardo.

Vorrei modificare il file /debian/control dall'interfaccia grafica da me creata, ma non avendo una dirchooser nel form non riesco ad entrare nella cartella selezionata. Il file è un file di testo, per questo mi interessa e riguarda il topic...

A parte il cross posting dell'argomento, ti abbiamo già dato suggerimenti nell'altro post. Hai provato split? Hai provato Replace? C'è ci dai prove concrete di quello che hai provato possiamo aiutarti entrando più nel dettaglio ma davanti al tuo pc ci sei tu e noi non sappiamo cosa accade...