Eliminare spazi vuoti

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???

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
[email protected]ha scritto:

Il giorno 23 aprile 2009 15.51, Stefano De nigris
[email protected]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, 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
[email protected]ha scritto:

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. :wink:

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
[email protected]ha scritto:

2009/4/23 Stefano De nigris [email protected]

" meglio cosi"
" allora io vado ciao"

Spero di aver reso l’idea. :wink:

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

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???

2009/4/23 Antonio C. [email protected]

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

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.

Il 23 aprile 2009 15.51, Stefano De nigris [email protected] 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

2009/4/23 Stefano De nigris [email protected]

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

Si perche?

lo sto usando

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

On Thu, Apr 23, 2009 at 11:16 AM, Stefano De nigris
<[email protected]

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

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
[email protected]ha scritto:

Ok pierpaolo grazie,facendo qualche modifica funziona.
Grazie Antonio,Pietro e Davide mi avete risolto un grande problema.

Ciao a tutti!!!

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

Ok ragazzi ho risolto.Gli ho fatto creare un altro file txt,su cui poi
lavorera il mio programma generale.:smiley: :smiley:

Ciao