Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: Mefrio - 27 Ottobre 2010, 17:24:00

Titolo: [RISOLTO]manipolare file di testo
Inserito da: Mefrio - 27 Ottobre 2010, 17:24:00
Tempo chiesi questa domanda, ma ora rileggendo le risposte, e rileggendo le mie domande poste in modo incomprensibile non ho capito niente!

Vorrei sapere come faccio a manipolare un file, del quale conosco tutto?

Il file è simile a questo
Codice: [Seleziona]
ciao come va?

io sono Mefrio  ...
vorrei eliminare la prima riga e i tre puntini!

Mi fu sugerito la funzione Split e Replace ma, attualmente, non riesco proprio a ricordare come si utilizzino le due!

Titolo: Re: manipolare file di testo
Inserito da: fsurfing - 27 Ottobre 2010, 20:19:01
puoi leggerti gli articoli in proposito presenti in due numeri de "il resto del pinguino"  :D che sono molto completi e chiari
se poi hai ancora dubbi chiedi pure
Titolo: Re: manipolare file di testo
Inserito da: Mefrio - 27 Ottobre 2010, 20:56:27
Ho letto tutti i numeri del resto del pinguino e gli darò una ripassata ;) è un peccato che non la continuiate a scrivere! Nel frattempo potresti farmi un esempio di ciò che ho ti ho spiegato?
Titolo: Re: manipolare file di testo
Inserito da: fsurfing - 27 Ottobre 2010, 21:24:01
un esempio si , ma mi sembra inutile visto che è presente un bell' articolo completo !

per il tuo caso specifico:

Codice: gambas [Seleziona]
dim stringa,risultato as string
dim righe as new string[]

stringa=file.load(nomefile.txt)

righe=split(stringa,"\n")

risultato=replace(righe[1],".","")
print risultato


solo il codice non serve molto senza una buona spiegazione percui rileggiti l' articolo :)

ps: chi ha detto che non viene più scritta?
Titolo: Re: manipolare file di testo
Inserito da: Mefrio - 29 Ottobre 2010, 16:14:27
non ne escono più :)

mi puoi fare un po di assistenza? ;D

se io volessi rimuovere un intera riga?
Titolo: Re: manipolare file di testo
Inserito da: fsurfing - 29 Ottobre 2010, 18:30:40
dim stringa,risultato as string 
dim righe as new string[] 

carichi il tuo file di testo in una stringa

stringa=file.load(user.home & "/pippo.txt")

a questo punto tramite split suddividi il file nelle varie righe e le metti in un array , come saprai il carattere di fineriga è "\n" percui

righe=split(stringa,"\n")

adesso nell' array hai tutte le righe del file per cui ci fai quello che vuoi in base alle tue necessità
Titolo: Re: manipolare file di testo
Inserito da: Mefrio - 30 Ottobre 2010, 15:46:05
Grazie mille! Purtroppo non sono riuscito ancora a leggere l'articolo :(

Mi faresti un ultimo piacere?

Ho capito il modo di suddivisione delle stringhe ma se ad esempio voglio eliminare la riga 1 come dovrei fare?

E se in ogni riga voglio rimuovere tutto quello che c'è da uno spazio in poi, ad esempio dal quinto in poi?
Titolo: Re: manipolare file di testo
Inserito da: fsurfing - 30 Ottobre 2010, 19:23:11
per eliminare una riga utilizzi il metodo delete degli array

ad esempio la 3° riga

array.delete(2)  il numero indica l' indice per cui si iniza da 0

per il secondo quesito ci sono vari modi a secondo di come e formattato il testo

quardati le funzioni delel stringhe  "mid" , "left","right", "instr "  oppure utilizzi un altra volta split utilizzando come carattere per la separazione  lo spazio
Titolo: Re: manipolare file di testo
Inserito da: Mefrio - 31 Ottobre 2010, 10:59:36
ok grazie mille! Cercherò di vedermi il resto da solo ;D
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: Mefrio - 31 Ottobre 2010, 11:34:26
senti ho ancora un piccolo problema! Utilizzando quei comandi in un progetto mi è andato tutto! Utilizzandoli in un altro mi dice "Unkow Symbol 'Load' in class 'Menu'"....che vuol dire?

EDIT:
Chesko insegna! (http://www.gambas-it.org/smf/index.php?topic=1236.0) ;D

ora ho risolto sul serio! Grazie mille
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: Mefrio - 01 Novembre 2010, 17:15:12
Ho un ultimissima domanda, alla quale non riesco a rispondermi ;D

Se utilizzo la funzione replace con parametri " ", "" per rimuovere gli spazi, essa me li rimuove tutti, come giusto che sia! Io vorrei che mi rimuovesse solo 3 spazi, è possibile?


oltre a questo vorrei sapere un altra cosa....ho una lista in un file di testo e devo leggerla fino all'ultimo elemento, per farlo, ho utilizzato questo codice
Codice: gambas [Seleziona]
DIM stringa, risultato AS String  
  DIM righe AS NEW string[]
  DIM count AS Integer
  count = 4
  stringa = File.Load("~/lista")  
  righe = Split(stringa, "\n")  
  risultato = Replace(righe[count], " ", "")
  ComboBox1.Text = risultato
  IF righe[count] = ""
    PRINT "vado avanti"
  ELSE
    count = count + 1
    Button1_Click()
  ENDIF

la lista sta nel file lista e il controllo avviena alla pressione del bottone1! Quando vado ad eseguire il programma e a cliccare il bottone l'IDE
mi dice Stack Overflow anche se il processo finisce quando la riga della lista è vuota! Come potrei risolvere quest'ultimo problemino?
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: fsurfing - 01 Novembre 2010, 18:23:40
hai fatto un loop infinito, il programma non si blocca perchè legge sempre la stesa riga

 count = 4  

Citazione
Se utilizzo la funzione replace con parametri " ", "" per rimuovere gli spazi, essa me li rimuove tutti, come giusto che sia! Io vorrei che mi rimuovesse solo 3 spazi, è possibile?
dovresti fare un lop e contare le cancellazioni però senza utilizzare replace ma ad esempio instr per trovare la posizione dello spazio e mid,left,righ per prelevare ciò che ti serve, oppure fare un altro split con carattere " " come separatore , dipende da cosa devi ottenere e dove devi metterlo


ps: ma che file stai cecando di manipolare?

Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: Mefrio - 01 Novembre 2010, 22:06:24
hai fatto un loop infinito, il programma non si blocca perchè legge sempre la stesa riga

 count = 4  

Citazione
Se utilizzo la funzione replace con parametri " ", "" per rimuovere gli spazi, essa me li rimuove tutti, come giusto che sia! Io vorrei che mi rimuovesse solo 3 spazi, è possibile?
dovresti fare un lop e contare le cancellazioni però senza utilizzare replace ma ad esempio instr per trovare la posizione dello spazio e mid,left,righ per prelevare ciò che ti serve, oppure fare un altro split con carattere " " come separatore , dipende da cosa devi ottenere e dove devi metterlo


ps: ma che file stai cecando di manipolare?


instr? Come si usa? ;D (scusa per la banalità della domanda)

Scusa ma non capisco perchè quello sia un loop infinito! Non dovrebbe interrompersi quando trova una riga vuota?

Devo manipolare l'output di xrandr! Mi serve per il Plymouth Manager (vedi sezione Ubuntu ;) )
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: fsurfing - 01 Novembre 2010, 22:35:49
posta un output di xrand così ti capisco meglio.

quardati questo esempio di estrapolazione dati dalla shell
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: Mefrio - 01 Novembre 2010, 23:05:19
Codice: [Seleziona]
Screen 0: minimum 320 x 175, current 1280 x 800, maximum 1280 x 800
default connected 1280x800+0+0 0mm x 0mm
   1280x800       50.0*
   1024x768       51.0     52.0 
   840x525        53.0 
   832x624        54.0 
   800x600        55.0     56.0     57.0     58.0     59.0 
   800x512        60.0 
   720x450        61.0 
   720x400        62.0 
   700x525        63.0 
   680x384        64.0     65.0 
   640x512        66.0     67.0 
   640x480        68.0     69.0     70.0     71.0     72.0 
   640x400        73.0 
   640x350        74.0 
   576x432        75.0     76.0     77.0     78.0     79.0     80.0 
   512x384        81.0     82.0     83.0     84.0     85.0 
   416x312        86.0 
   400x300        87.0     88.0     89.0     90.0     91.0 
   360x200        92.0 
   320x240        93.0     94.0     95.0     96.0 
   320x200        97.0 
   320x175        98.0 
io inizio a leggere dalla terza riga ( righe[2] )

l'esempio che mi hai postato non rappresenta molto quello che voglio fare!

Io per fare questo metto l'output di xrandr con "xrandr  > ~/file" e poi inizio a leggere! Per il problema del loop infinito si può risolvere copiando tante volta, quante serve, i comandi (soluzione poco ortodossa e potrebbe non andare su altri pc)!
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: pastrank - 01 Novembre 2010, 23:28:06
Solo per fare un po' di confusione, sul mio pc xrandr, come prime righe, restituisce

Codice: [Seleziona]
Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 4096 x 4096
VGA-1 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 474mm x
 296mm
   1680x1050      60.0*+

E suppongo che se uno usa due schermi siano ancora di piu'. Questo per dire che dovresti controllare quale e' la prima riga che inizia con un numero prima di iniziare, perche' esistono molteplici distribuzioni e moltissime configurazioni...
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: Mefrio - 01 Novembre 2010, 23:30:22
si lo so! Per ora mi interessi che funzioni sul mio! Una volta capito bene come modificare in modo funzionale il codice non ci saranno problemi
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: fsurfing - 02 Novembre 2010, 20:09:16
il sistema migliore per trattare questo file è proprio il metodo utilizzato dal mio esempio

innanzitutto è inute che salvi l' output in un file per poi riaprirlo! salvalo direttamente in una stringa

poi splitti con "\n" e ottieni le varie righe

inizia ad analizzare ogni riga splittandola con il carattere di tabulazione  ottenendo così un array che utilizzerai a sua volta per riempire degli array che contengono la risoluzione e la frequenza, meglio ancora ti conviene utilizzare un oggetto come contenitore
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: fsurfing - 02 Novembre 2010, 21:04:44
tieni un esempio di come io manipolerei il tuo output, naturalmente non è l' unico modo :)
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: Mefrio - 02 Novembre 2010, 21:17:03
 :o :o

Ma tu sei un genio!

Grazie milel! Ho risolto combinando left e trim
Codice: gambas [Seleziona]
DIM stringa, risultato AS String  
  DIM righe AS NEW string[] 
 
  SHELL "xrandr" TO stringa
 
  righe = Split(stringa, "\n") 
 
  risultato = Trim(Left(righe[2], 12))
   
  ComboBox1.Add(risultato) 

Non è completo come il tuo ma lo migliorerò :)

Quel gestore di risoluzioni è veramente ottimo :) Che ne dici se lo inserisco nel mio progeto? Naturalmente ti menzionerò nei credits (come è giusto che sia)
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: fsurfing - 02 Novembre 2010, 21:45:44
fai pure ..no problem
Titolo: Re: [RISOLTO]manipolare file di testo
Inserito da: Mefrio - 02 Novembre 2010, 21:47:11
ok grazie anche per questo