Autore Topic: [RISOLTO]manipolare file di testo  (Letto 1542 volte)

Offline Mefrio

  • Grande Gambero
  • ***
  • Post: 203
    • Mostra profilo
[RISOLTO]manipolare file di testo
« il: 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!

« Ultima modifica: 31 Ottobre 2010, 10:59:55 da Mefrio »
per quanto io sia messo male, voglio aiutare chi sta peggio di me :D

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: manipolare file di testo
« Risposta #1 il: 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

Offline Mefrio

  • Grande Gambero
  • ***
  • Post: 203
    • Mostra profilo
Re: manipolare file di testo
« Risposta #2 il: 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?
per quanto io sia messo male, voglio aiutare chi sta peggio di me :D

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: manipolare file di testo
« Risposta #3 il: 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?

Offline Mefrio

  • Grande Gambero
  • ***
  • Post: 203
    • Mostra profilo
Re: manipolare file di testo
« Risposta #4 il: 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?
per quanto io sia messo male, voglio aiutare chi sta peggio di me :D

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: manipolare file di testo
« Risposta #5 il: 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à

Offline Mefrio

  • Grande Gambero
  • ***
  • Post: 203
    • Mostra profilo
Re: manipolare file di testo
« Risposta #6 il: 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?
per quanto io sia messo male, voglio aiutare chi sta peggio di me :D

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: manipolare file di testo
« Risposta #7 il: 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

Offline Mefrio

  • Grande Gambero
  • ***
  • Post: 203
    • Mostra profilo
Re: manipolare file di testo
« Risposta #8 il: 31 Ottobre 2010, 10:59:36 »
ok grazie mille! Cercherò di vedermi il resto da solo ;D
per quanto io sia messo male, voglio aiutare chi sta peggio di me :D

Offline Mefrio

  • Grande Gambero
  • ***
  • Post: 203
    • Mostra profilo
Re: [RISOLTO]manipolare file di testo
« Risposta #9 il: 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! ;D

ora ho risolto sul serio! Grazie mille
« Ultima modifica: 31 Ottobre 2010, 11:38:01 da Mefrio »
per quanto io sia messo male, voglio aiutare chi sta peggio di me :D

Offline Mefrio

  • Grande Gambero
  • ***
  • Post: 203
    • Mostra profilo
Re: [RISOLTO]manipolare file di testo
« Risposta #10 il: 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?
« Ultima modifica: 01 Novembre 2010, 17:29:54 da Mefrio »
per quanto io sia messo male, voglio aiutare chi sta peggio di me :D

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: [RISOLTO]manipolare file di testo
« Risposta #11 il: 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?


Offline Mefrio

  • Grande Gambero
  • ***
  • Post: 203
    • Mostra profilo
Re: [RISOLTO]manipolare file di testo
« Risposta #12 il: 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 ;) )
« Ultima modifica: 01 Novembre 2010, 22:20:05 da Mefrio »
per quanto io sia messo male, voglio aiutare chi sta peggio di me :D

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: [RISOLTO]manipolare file di testo
« Risposta #13 il: 01 Novembre 2010, 22:35:49 »
posta un output di xrand così ti capisco meglio.

quardati questo esempio di estrapolazione dati dalla shell

Offline Mefrio

  • Grande Gambero
  • ***
  • Post: 203
    • Mostra profilo
Re: [RISOLTO]manipolare file di testo
« Risposta #14 il: 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)!
per quanto io sia messo male, voglio aiutare chi sta peggio di me :D