Forum: Italian Ruby user group Eliminare spazi vuoti

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Stefano D. (Guest)
on 2009-04-23 17:51
Ciao ragazzi,eccomi di nuovo a chiedere il vostro aiuto.Ho creato un
pre-programma che ha lo scopo di eliminare gli spazi vuoti che si
trovano all'inizio delle frasi,ad esempio:

"     ciao"                    #sono tante frasi che hanno gli spazi
simili a
" come va"                     #questo che ho scritto
"tutto bene"

Io ho provato con questo codice,che va a leggere il testo da un file
txt.Il codice è il seguente:

primariga=[]
arr=IO.readlines("prova.txt")
valore=0
for i in 0 .. arr.size-1      #Ho creto questo for in modo che si vada a
prendere
primariga=arr[valore].split(/\s/)  #una frase alla volta,e gli applchi
valore=valore+1                    #il blocco di codice
while primariga[0] == nil
...codice del blocco...
puts "eccoci"                 #l'ho usato per vedere se funziona bene il
while
end
end

Il problema che ho è che ottengo un loop infinito di parole
"eccoci".Come posso risolvere???
Pierpaolo S. (Guest)
on 2009-04-23 18:00
(Received via mailing list)
Se vuoi eliminare gli spazi all'inizio di una stringa puoi usare lstrip

"   ciao".lstrip

restituisce "ciao".


Il giorno 23 aprile 2009 15.51, Stefano De nigris
<removed_email_address@domain.invalid>ha scritto:
Davide Monfrecola (Guest)
on 2009-04-23 18:00
(Received via mailing list)
Il giorno 23 aprile 2009 15.51, Stefano De nigris
<removed_email_address@domain.invalid>ha scritto:

> valore=valore+1                    #il blocco di codice
> while primariga[0] == nil
> ...codice del blocco...
> puts "eccoci"                 #l'ho usato per vedere se funziona bene il
> while
> end
> end
>
> Il problema che ho è che ottengo un loop infinito di parole
> "eccoci".Come posso risolvere???
>  <http://lists.ruby-it.org/mailman/listinfo/ml>


Prova a modificarlo
così:
primariga << arr[valore].split(/\s/)
Stefano D. (Guest)
on 2009-04-23 18:23
Pierpaolo..la soluzione sarebbe quella che hai detto tu,pero prima di
fare cio devi far funzionare il blocco del while,perche non vuole
saperne di funzionare;ad esempio se fai nel blocco del while-->
puts"ciao" noterai che non ti stampera nulla a video.Quindi il problema
è li.

Davide dove lo devo sostituire??Tu dici in:
primariga=arr[valore].split(/\s/)

Se è si..non posso modificare questo valore perche se no mi
modificherebbe tutto il programma che viene dopo questo
pre-programma.Capito???
Pierpaolo S. (Guest)
on 2009-04-23 18:29
(Received via mailing list)
Stefano, non ho capito bene cosa devi fare. Tu hai u file di testo e
vuoi
eliminare gli spazi all'inizio di ogni riga?

Il giorno 23 aprile 2009 16.23, Stefano De nigris
<removed_email_address@domain.invalid>ha scritto:
Stefano D. (Guest)
on 2009-04-23 18:37
Perfetto è quella l'idea...pero è da oltre a queste righe che inziano
con spazi vuoti ci sono anche righe con spazi vuoti,e in quel caso
vorrei che non facesse niente il blocco di codice.Un esempio di testo
eccolo:


"      ciao ciao"
" come va??tutto bene"
"               "
"eh si tutto bene :D"
" meglio cosi"
" allora io vado ciao"

Spero di aver reso l'idea. ;)
Pierpaolo S. (Guest)
on 2009-04-23 18:46
(Received via mailing list)
prova se questo va bene
###
righe_senza_spazi = []

open("prova.txt") do |f|
  f.each{|l| righe_senza_spazi << l.strip}
end

righe_senza_spazi.each do |r|
  puts r
end
###


Il giorno 23 aprile 2009 16.37, Stefano De nigris
<removed_email_address@domain.invalid>ha scritto:
Antonio C. (Guest)
on 2009-04-23 18:51
(Received via mailing list)
2009/4/23 Stefano De nigris <removed_email_address@domain.invalid>

> " meglio cosi"
> " allora io vado ciao"
>
> Spero di aver reso l'idea. ;)


One liner:

file = File.readlines("prova.txt").map{|line| l =~ /\s+\n/ ? line :
line.lstrip }.join

Poi stampi o scrivi nel file il contenuto della stringa 'file'.
Ciao,
Antonio
--
http://antoniocangiano.com - Zen and the Art of Programming
http://math-blog.com - Mathematics is wonderful!
http://stacktrace.it - Aperiodico di resistenza informatica
Follow me on Twitter: http://twitter.com/acangiano
Author of "Ruby on Rails for Microsoft Developers":
http://bit.ly/rorforms
Antonio C. (Guest)
on 2009-04-23 18:53
(Received via mailing list)
2009/4/23 Antonio C. <removed_email_address@domain.invalid>

> file = File.readlines("prova.txt").map{|line| l =~ /\s+\n/ ? line :
> line.lstrip }.join
>
> Poi stampi o scrivi nel file il contenuto della stringa 'file'.
>

Scusa, ho cambiato il nome dell'argomento del blocco all'ultimo secondo:

file = File.readlines("prova.txt").map{|line| line =~ /\s+\n/ ? line :
line.lstrip }.join

--
http://antoniocangiano.com - Zen and the Art of Programming
http://math-blog.com - Mathematics is wonderful!
http://stacktrace.it - Aperiodico di resistenza informatica
Follow me on Twitter: http://twitter.com/acangiano
Author of "Ruby on Rails for Microsoft Developers":
http://bit.ly/rorforms
Pietro G. (Guest)
on 2009-04-23 19:08
(Received via mailing list)
Il 23 aprile 2009 15.51, Stefano De nigris 
<removed_email_address@domain.invalid> ha
scritto:
> end
> Il problema che ho è che ottengo un loop infinito di parole "eccoci"

questo vuol dire che, quando arrivi al while, primariga[0] vale nil.
dentro il loop, primariga[0] non viene cambiato, quindi continua a
valere nil.

questo è un ciclo infinito.

potresti usare un qualche indice invece di zero, ma le soluzioni di
Pierpaolo e Antonio sono migliori.

pietro
Stefano D. (Guest)
on 2009-04-23 19:11
Pierpaolo scusa ma sarò un rompi.... ma non è possibile usare questo
codice:

primariga=[]
arr=IO.readlines("prova.txt")
valore=0
for i in 0 .. arr.size-1
primariga=arr[valore].split(/\s/)
valore=valore+1
while primariga[0] == nil        #o un altro costrutto ciclico
...blocco di codice in cui userò lstrip..
puts"ciao"                 #è per verificare se funzione il while
end
puts primariga.join(" ")
end

andando pero a cambiare solo il while con un if (o un altro costrutto
ciclico)??Perche tutte le istruzioni,escluse il while,fanno parte di un
programma che converte il file di testo.Quindi se vado a cambiare tutto
questo codice significa che cambiero tutto il programma.Scusami!!!

Antonio...ho provato ad applicarla mi mi escono solo numeri,credo che
rappresentino le parole.
Antonio C. (Guest)
on 2009-04-23 19:14
(Received via mailing list)
2009/4/23 Stefano De nigris <removed_email_address@domain.invalid>

> Antonio...ho provato ad applicarla mi mi escono solo numeri,credo che
> rappresentino le parole.
>

Non stai usando Ruby 1.8?
--
http://antoniocangiano.com - Zen and the Art of Programming
http://math-blog.com - Mathematics is wonderful!
http://stacktrace.it - Aperiodico di resistenza informatica
Follow me on Twitter: http://twitter.com/acangiano
Author of "Ruby on Rails for Microsoft Developers":
http://bit.ly/rorforms
Stefano D. (Guest)
on 2009-04-23 19:16
Si perche?
Stefano D. (Guest)
on 2009-04-23 19:16
lo sto usando
Antonio C. (Guest)
on 2009-04-23 19:21
(Received via mailing list)
On Thu, Apr 23, 2009 at 11:16 AM, Stefano De nigris
<removed_email_address@domain.invalid
> wrote:

> Si perche?


OK. Prova ad eseguire la riga seguente:

puts File.readlines("prova.txt").map{|line| line =~ /\s+\n/ ? line :
line.lstrip }.join

Poi copiami l'output (o parte dell'output) che ottieni.

Ciao,
Antonio
--
http://antoniocangiano.com - Zen and the Art of Programming
http://math-blog.com - Mathematics is wonderful!
http://stacktrace.it - Aperiodico di resistenza informatica
Follow me on Twitter: http://twitter.com/acangiano
Author of "Ruby on Rails for Microsoft Developers":
http://bit.ly/rorforms
Stefano D. (Guest)
on 2009-04-23 19:21
Ho provato a cancellare tutto il codice inziale che avevo creato e l'ho
sostituito con il tuo (Antonio) e funziona perfettamente.Tuttavia non
posso applicarlo al mio programma perche se no mi cambia tutto e dovrei
rifarlo dall'inizio.Esiste una soluzione simile da applicare a questo
codice qui:

primariga=[]
arr=IO.readlines("prova1.txt")
valore=0


for i in 0 .. arr.size-1
primariga=arr[valore].split(/\s/)
valore=valore+1
puts primariga
end
Pierpaolo S. (Guest)
on 2009-04-23 19:26
(Received via mailing list)
Non ho capito bene come deve funzionare il programma. Ho modificato
così il
tuo (prendendo spunto anche da quello di Antonio)

###
primariga=[]
arr=IO.readlines("prova.txt")
valore=0
testo_senza_spazi = ""
for i in 0 .. arr.size-1
  primariga=arr[valore].split(/\s/)
  valore=valore+1

  line = arr[valore-1]
  testo_senza_spazi << (line =~ /\s+\n/ ? line : line.lstrip)

  puts primariga.join(" ")
end

puts
puts testo_senza_spazi
###

ho modificato solo il ciclo while

Il giorno 23 aprile 2009 17.21, Stefano De nigris
<removed_email_address@domain.invalid>ha scritto:
Antonio C. (Guest)
on 2009-04-23 19:34
(Received via mailing list)
2009/4/23 Stefano De nigris <removed_email_address@domain.invalid>

> Ho provato a cancellare tutto il codice inziale che avevo creato e l'ho
> sostituito con il tuo (Antonio) e funziona perfettamente.Tuttavia non
> posso applicarlo al mio programma perche se no mi cambia tutto e dovrei
> rifarlo dall'inizio.Esiste una soluzione simile da applicare a questo
> codice qui:


Ciao Stefano,

se intendi dire che hai bisogno di stampare riga per riga, allora puoi
fare
qualcosa del genere:


arr = IO.readlines("prova1.txt")

for line in arr
  puts line =~ /\s+\n/ ? line : line.lstrip
end

Se così non ti va bene, non è chiarissimo cosa debba restare uguale al tuo
codice iniziale e cosa può invece cambiare. In generale, dovresti sempre
essere in grado di sostituire una parte del programma con una che svolge
la
stessa funzione. Se hai bisogno di assegnare un certo valore ad alcune
variabili per far funzionare il resto del programma, facci sapere quali
variabili e cosa vorresti contenessero.

Ciao,
Antonio
--
http://antoniocangiano.com - Zen and the Art of Programming
http://math-blog.com - Mathematics is wonderful!
http://stacktrace.it - Aperiodico di resistenza informatica
Follow me on Twitter: http://twitter.com/acangiano
Author of "Ruby on Rails for Microsoft Developers":
http://bit.ly/rorforms
Stefano D. (Guest)
on 2009-04-23 19:35
Ok pierpaolo grazie,facendo qualche modifica funziona.
Grazie Antonio,Pietro e Davide mi avete risolto un grande problema.

Ciao a tutti!!!!
Stefano D. (Guest)
on 2009-04-24 18:06
Ciao ragazzi ho una curiosità da chiedervi.Come sapete ho modificato il
programma che mi è stato suggerito da Pierpaolo in questo modo:

primariga=[]
arr=IO.readlines("record.txt")
valore=0
testo_senza_spazi = [/\s/]
for i in 0 .. arr.size-1
  primariga=arr[valore].split(/\s/)
  valore=valore+1

  line = arr[valore-1]
  testo_senza_spazi << (line =~ /\s+\n/ ? line : line.lstrip)
primariga=testo_senza_spazi
puts primariga
end

in modo tale che funzioni per il mio caso specifico.Il mio dubbio è il
seguente: è possibile far stampare una sola volta la variabile
primariga,perche se lo mandate in esecuzione con questo testo:

type
    nomeclasse=class(piugrande)
      public
   constructor nome;
  destructor destroy;override;
   procedure clear;
  procedure load(stream:tstream);
  function write(buffer:longint):longint;override;
 private
  procedure setcapacity(newcapacity:longint);
 protected
        function reajlloc(var newcapacity:longint):pointer;virtual;
 property capacity:longint read fcapacity write setcapacity;
end;

noterete che stampa ciclicamente il testo,che è corretto.Ok?!

Ciao ciao
Stefano D. (Guest)
on 2009-04-24 18:23
Ok ragazzi ho risolto.Gli ho fatto creare un altro file txt,su cui poi
lavorera il mio programma generale.:D :D

Ciao
This topic is locked and can not be replied to.