Autore Topic: [RISOLTO]Stampare un testo in una determinata riga di un file  (Letto 2220 volte)

Offline eevan

  • Gamberetto
  • *
  • Post: 32
    • Mostra profilo
lo so che la richiesta per voi guru è una cosa da nulla, ma per me che sono alle prime armi è degenerante psicofisicamente perche non riesco a trovare niente al riguardo.

dovrei scivere un testo posizionato alla secondo riga di un file: come si fa?
« Ultima modifica: 20 Maggio 2012, 23:38:58 da eevan »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #1 il: 18 Maggio 2012, 00:31:55 »
gurucuccuru...  ;D

Quì di guru, nel senso che è proprio brutto, è un certo ceskho... Se lo vedi fai finta di nulla...  ;D

Scherzi a parte, forse sono troppo guru per capire, ma cosa vuoi veramente fare?
Quello che ho capito è che hai un file di testo, in cui scrivere un qualcosa sempre nella seconda riga... Ma se la seconda riga non c'è?

1) puoi leggere il file linea per linea, fino ad incontrare la linea interessata, scrivendo poi le linee su un file temporaneo. Quando incontri il numero di linea che ti interessa, fai prima una scrittura della tua seconda linea, poi continui con le altre. Tieni conto che la lettura in modalità testo (non con read/write) viene fatta appunto divisa per linee, che sono contrassegnate da un line-feed (Chr(10) per Linux, Chr(10)+Chr(13) per WIndows).

2) puoi caricarti l'intero contenuto del file (se non eccessivamente grande) e identificare la linea interessata, sempre con il metodo 1), ovvero tramite il carattere separatore.

Se vuoi prorpio un esempio, basta che leggi il wiki, o cerchi nel forum, perchè di argomenti simili ce ne sono a bizzeffe...

Se proprio non riesci. allora fatti sentire...

Offline eevan

  • Gamberetto
  • *
  • Post: 32
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #2 il: 18 Maggio 2012, 00:50:27 »
 :o ah?!??

Non ci ho capito nulla.

la seconda riga è effettivamente vuota.
Ho letto praticamente tutto il manuale su gambas ma non riesco davvero a capire come funziona per scrivere un testo su una determinata riga e di conseguenza scrivere codice. Anche perche di esempi pratici non ce ne sono.
Mi manca questo piccolo particolare per poi presentare il programma alle persone.
Mi sono fossilizzato su quel punto.

La spiegazione è semplice: ho un file html di metti 100 righe, la seconda è vuota perche dovrei inserire il link per il file css scelto.

Ora, come faccio a riepire quella benedetta seconda riga con: <link rel="stylesheet" type="text/css" href="TEMASCELTO.css">?


Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #3 il: 18 Maggio 2012, 01:08:45 »
Credo che md9327 facesse riferimento a questo:
http://gambaswiki.org/wiki/lang/lineinput

Può essere utile leggere anche questi altri suoi interventi qui:
http://www.gambas-it.org/smf/index.php?topic=308.msg2744#msg2744
http://www.gambas-it.org/smf/index.php?topic=1197.msg13306#msg13306


Potrebbe essere d'aiuto anche questo di fsurfing:
http://www.gambas-it.org/smf/index.php?topic=1462.msg16607#msg16607
« Ultima modifica: 09 Agosto 2020, 02:24:53 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline eevan

  • Gamberetto
  • *
  • Post: 32
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #4 il: 18 Maggio 2012, 13:52:06 »
ti ringrazio, ho guardato gli esempi ma continuo a non capirne il meccanismo.
mi faresti un esempino facile facile?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #5 il: 18 Maggio 2012, 14:03:04 »
ti ringrazio, ho guardato gli esempi ma continuo a non capirne il meccanismo.
mi faresti un esempino facile facile?

Se ho interpretato correttamente il suggerimento di md9327:   :-X

Codice: gambas [Seleziona]

Public Sub Button1_Click()

 Dim f As File
 Dim b As Byte
 Dim s$ As String

  f = Open "/percorso_del_mio_file" For Input

  While Not Eof(f)  ' compie il ciclo fin tanto che non è giunto alla fine del file
    Inc b
    Line Input #f, s$
 
   Print b & "^ riga = "; s$
  
 Wend

End


...se vuoi caricare la tua riga, però non in un file temporaneo (come suggerito da md9327), bensì in una variabile da poter utilizzare in seguito:

Codice: gambas [Seleziona]

Private ss$ As String[]


Public Sub Button1_Click()

 Dim f As File
 Dim b As Byte
 Dim s$ As String

  f = Open "/percorso_del_mio_file" For Input

  ss$ = New String[]

  While Not Eof(f)  ' compie il ciclo fin tanto che non è giunto alla fine del file
    Inc b
    Line Input #f, s$
 
' carica il contenuto della variabile s$ nel nuovo elemento
' della variabile ss$:
    ss$.Add(s$)
 
   Print b & "^ riga = "; s$
 
' se è arrivato alla 2^ riga, allora esce dal ciclo:
   If b = 2 Then Exit

 Wend

End


Public Sub Button2_Click()

   Print ss$[1]  ' 1  perché l'indice dell'array comincia da zero

End

« Ultima modifica: 18 Maggio 2012, 16:58:28 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline eevan

  • Gamberetto
  • *
  • Post: 32
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #6 il: 18 Maggio 2012, 19:22:56 »
mi dispiace ma non ci ho capito ancora una mazza e son due ore che provo e riprovo.

c'e una guida dettagliata da qualche parte?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #7 il: 18 Maggio 2012, 19:33:19 »
mi dispiace ma non ci ho capito ancora una mazza e son due ore che provo e riprovo.

c'e una guida dettagliata da qualche parte?

L'esempio che t'ho fatto semplicemente legge le righe del file.

Ma cosa - in particolare - non ti è chiaro ?
« Ultima modifica: 18 Maggio 2012, 19:35:51 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline eevan

  • Gamberetto
  • *
  • Post: 32
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #8 il: 18 Maggio 2012, 20:48:50 »
piu o meno tutto.

voglio dire...possibile che per stampare un testo su una riga bisogna fare tuta questa trafila?

non basta dire "stampami textbox.text sulla riga 2." e fine dei giochi.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #9 il: 19 Maggio 2012, 01:37:02 »
voglio dire...possibile che per stampare un testo su una riga bisogna fare tuta questa trafila?
non basta dire "stampami textbox.text sulla riga 2." e fine dei giochi.

...forse ci sarà pure, ma - ahimé ! - io non sono uno di quei guru.

Ad ogni modo.... poniamo di avere un semplice file di testo con cinque righe (ma facciamo finta che noi non conosciamo tale esatto numero). Le righe sono formate dalle seguenti semplici parole:

aladino
simbad
sherazad
Abu Qir
Abu Sir


Poniamo il caso che vogliamo cambiare la parola della seconda riga da simbad in Alì Babà.... io attualmente  ;D procederei così:  :-[

Codice: gambas [Seleziona]

Public Sub Button1_Click()
 Dim f As File
 Dim s$, sss As String
 Dim a As Byte

' Dichiaro quindi anche una variabile array di tipo stringa con numero elementi non definito.
' Non lo definisco, poiché abbiamo ammesso che non conosco il numero esatto di righe
' contenute dal file di testo:
 Dim sArr$ As String[]


' apro il mio file di testo
 f = Open "/mio_file_di_testo" For Input

' creo la variabile stringa array
 sArr$ = New String[]

' Vado a leggere tutte le righe del file:
  While Not Eof(f)    ' compie il ciclo fin tanto che non è giunto alla fine del file  
  
  Line Input #f, s$

' carico ogni nuova riga in un nuovo elemento della variabile array:
    sArr$.Add(s$)
    
 Wend  

' chiudo il file aperto in modalità Input:
  Close #f

' A questo punto del codice ho letto tutto il file di testo.
'-----------------------------------------------------------------------

' Passo quindi a cambiare "le carte in tavola"....
' ossia a trasformare il contenuto del file di testo.
' In particolare, come era nella mia iniziale intenzione:
' modificare la seconda riga con la parola: Alì Babà.
' Ho bisogno di un ciclo per ricostruire riga dopo riga il nuovo file di testo !
'...e dove vado a prendere il contenuto di ciascuna riga ?  ;-) eheheheh !
 For a = 0 To sArr$.Max
 
 If a = 1 Then
' se sono giunto alla seconda riga (il conteggio inizia da zero !),
' allora il contenuto del 2° elemento dell'indice
' della variabile array di tipo stringa sarà: Alì Babà:
  sArr$[a] = "Alì Babà"
Endif

' la variabile stringa "sss" è uguale alla precedente versione
' di se stessa + la successiva riga + il carattere "riga a capo":
   sss = sss & sArr$[a] & "\n"
 
 Next
 
' vado a salvare il nuovo file di testo
' (ora modificato nella sua 2^ riga):
 File.Save("/mio_nuovo_file_di testo", sss)
 
End



....però ai più esperti l'ardua e finale sentenza !  :-X
« Ultima modifica: 19 Maggio 2012, 17:53:13 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #10 il: 19 Maggio 2012, 16:05:06 »
Tieni conto che più si cerca di semplificare le cose, più il supporto per farlo diventa complesso.
A parte la tiritera sul fatto che i nuovi linguaggi ad alto livello condizionano, a mio parere, il cervello delle persone che iniziano da poco a programmare, inserendo facility un pò troppo semplici e molto standardizzate, limitando alla fine la dinamicità intrinseca del programmazione, ci sono anche dei limiti.
Tenendo conto che lo scrivere 3/4 righe di codice per leggere e modificare un file credo sia già un traguardo, teniamo anche presente che la sintassi usata nasconde un qualche migliaio di reali righe di codice per eseguire le operazioni (librerie).
Un linguaggio di programmazioen deve poter essere il più possibile slegato dall'uso che ne farà l'utente finale (ossia il programmatore), cercando di essere il più dinamico possibile, anche eliminando i giri obbligati che vengono comunque risolti dal codice sottostante, ma senza togliere la possibilità di usarlo un pò per tutto.
Nel caso in cui serva una specializzazione di una determinata funzione, è il programmatore che la farà sulla base degli strumenti che offre il linguaggio.
Gli esempi che ti ha postato vuott, possono sembrare complicati ma in realtà non lo sono affatto, in quanto ha usato il minimo indispensabile per effettuare un determinata operazione. Se parliamo poi del modo logico con cui affrontare e risolvere un problema, bè, qui il discorso si amplia, in quanto per raggiungere uno scopo le strade possono essere svariate, e non sempre quella più semplice è quella più dritta.
Comunque, un minimo di base bisogna pure crearsela, e non è un approggio giusto quello di pretendere una risoluzione se non si sà neppure che ci sono le strade per raggiungerla, nè si sia intrapresa almeno una di queste strade. Una volta capito un meccanismo, si può sempre migliorarlo successivamente.
Il mio consiglio è intanto di provare i suggerimenti che hai ricevuto, poi si vedrà di evolverli...

Tocca sudare prima...  ;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #11 il: 19 Maggio 2012, 17:47:06 »
Adesso, caro eevan, hai ben compreso perché md9327 è uno tra i Guru di questo Forum.  ;)

"Il maestro né dice, né non dice, ma indica !:-*
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline eevan

  • Gamberetto
  • *
  • Post: 32
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #12 il: 20 Maggio 2012, 18:54:41 »
si ho capito. E lo sto provando sulla mia pellaccia col programma che sto sviluppando.

comuunque..
provando il tuo codice mi esce un errore: loop variable must be local.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #13 il: 20 Maggio 2012, 23:02:02 »
si ho capito. E lo sto provando sulla mia pellaccia col programma che sto sviluppando.
Non ti avvilire. Ci siamo passati... e ci passamo tutti quanti: ricorda sempre che in questo forum il principio generale è:
" Poni la questione. Poi cerca di risolverla e torna nel forum a spiegare come l'hai risolta ! ".  ;D

md3927, poi, ha dato a noi tutti una lezione fondamentale: abituarsi ad essere capaci di giungere da sé alla soluzione (anticamente si sarebbe detto: alla verità) seppur avendo poche informazioni... un po' una sorta di palestra.  ;)
Anche lui è un po'... antico  ;) : è legato al nobile principio: "agli astri attraverso le asperità" !


comuunque..
provando il tuo codice mi esce un errore: loop variable must be local.
Scusami, quale dei tre codici ?
Tieni conto che dopo un po' avevo apportato qualche modifica - se non erro - ad un paio di quelli, per eliminare alcune sviste di scrittura e refusi.
Copialo nuovamente, e riprova.
« Ultima modifica: 20 Maggio 2012, 23:29:48 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline eevan

  • Gamberetto
  • *
  • Post: 32
    • Mostra profilo
Re: Stampare un testo in una determinata riga di un file
« Risposta #14 il: 20 Maggio 2012, 23:09:21 »
sono felice che la prendiate con filosofia senza arrabbiarvi. vi ringrazio davvero.

l'ultimo codice che hai postato, su "For a = 0 To sArr$.Max "