Come rimuovere interruzione di riga quando si legge un file in Ruby

Sto cercando di sbarazzarsi delle staffe [] e la nuova linea \n di essere stampato.

Mio codice simile a:

name1 = File.readlines('first.txt').sample(1)
name2 = File.readlines('middle.txt').sample(1)
name3 = File.readlines('last.txt').sample(1)

name = print (name1.strip 
    print name2.strip 
    print name3.strip)

puts name

Vorrei uscita a guardare come JoshBobbyGreen.
Tuttavia, sembra che:

[\"Josh\\n\"][\"Bobby\\n\"][\"Green\\n\"]

Ho provato con .gsub, chomp e split ma forse io li sto usando sbagliato.



5 Replies
  1. 3

    Il tuo codice è un problema secondario che causa i risultati che si sono verificati.

    quando si utilizza:

    name1 = File.readlines('first.txt').sample(1)

    Il valore restituito NON È una Stringa, ma piuttosto una Matrice con 1 campione casuale. io.e:

    ["Jhon"]

    Questo è il motivo per cui si ottiene l’uscita ["Jhon"] quando si utilizza print.

    Dal momento che ci si aspetta (e preferisco) una stringa, invece, provare questo:

    name1 = File.readlines('first.txt').sample(1)[0]
    name2 = File.readlines('middle.txt').sample(1)[0]
    name3 = File.readlines('last.txt').sample(1)[0]

    o:

    name1 = File.readlines('first.txt').sample(1).pop
    name2 = File.readlines('middle.txt').sample(1).pop
    name3 = File.readlines('last.txt').sample(1).pop

    o, probabilmente quello che hai fatto,, senza argomenti, sample restituirà un oggetto invece di un Array:

    name1 = File.readlines('first.txt').sample
    name2 = File.readlines('middle.txt').sample
    name3 = File.readlines('last.txt').sample

    Inoltre, durante la stampa, sarebbe meglio se si è creata una stringa di includere tutti gli spazi e di formattazione che si voleva. cioè:

    name1 = File.readlines('first.txt').sample(1).pop
    name2 = File.readlines('middle.txt').sample(1).pop
    name3 = File.readlines('last.txt').sample(1).pop
    
    puts "#{name1} #{name2} #{name3}."
    # or
    print "#{name1} #{name2} #{name3}."
    • cavolo, hai ragione. imparare somethign di nuovo tutti i giorni 🙂
  2. 10

    mette aggiunge una nuova riga alla fine dell’uscita. la stampa non.
    L’utilizzo della stampa. Si potrebbe risolvere il problema. Inoltre, è possibile utilizzare .striscia.

    "\tgoodbye\r\n".strip   #=> "goodbye"
    • noap :\ che non funziona
    • aggiungere il nome della stampa.striscia, inoltre, non ha lavoro
    • Puoi postare il codice?
    • Ho appena messo la modifica in questione
    • è necessario utilizzare nome1.striscia, nome2.striscia…
    • ricevo questo errore fullname.rb:36:in striscia’: numero di argomenti errato (1 0) (ArgumentError) da yahoo.rb:36:in <main>'

  3. 1

    Se:

    name1 = ["Josh\n"]
    name2 = ["Bobby\n"]
    name3 = ["Green\n"]

    è solo:

    puts [name1, name2, name3].map { |a| a.first.strip }.join('')
      #=> JoshBobbyGreen
    • Io uso &:strip esattamente? perché ho un in map undefined method strip, for...
    • Scusa, non ti seguo. Si ottiene un’eccezione l’esecuzione di questo? Sono sicuro che il codice va bene. Per inciso, map(&:strip) produce lo stesso risultato map { |s| s.strip }.
    • Non ero sicuro se &:strip è stato un errore di battitura
    • ma si dice “in mappa: undefined method ‘striscia’”
    • Questo è molto strano. name1, name2 e name3 sono stringhe e la Classe string sicuramente è un metodo strip. Il codice funziona bene per me con Rubino v2.2 (e non credo che potrebbe essere un problema di versione). Hai usato il mio definizioni name1, name2 e name3? Se non, avrei bisogno di sapere i valori di tali variabili per diagnosticare il problema.
    • la soluzione era scritto sopra, ma vi ringrazio per il vostro aiuto 🙂 non avevo idea di uno, in modo che io apprezzo.
    • Perché Array#sample(n) restituisce un array, non c’è strip metodo Array
    • a causa di map, String#strip è invocato su ogni elemento dell’array [name1,name2,name3], che è una stringa.
    • in OP la domanda originale, name1 è un Array.
    • grazie. Finalmente ho capito! Si modifica.

  4. 0
    puts %w(first middle last).map { |e| IO.readlines("#{e}.txt").sample.strip }.join
    • questo potrebbe effettivamente il lavoro, farò una prova
    • Se funziona, un semplice upvote per la risposta sarebbe apprezzato. 🙂
  5. 0

    In modo da evitare eccessivi \n‘s preferisco utilizzare split:

    File.read('first.txt').split("\n") # double quotes are important!

    In modo da evitare di utilizzare array di sample metodo senza parametri:

    File.read('first.txt').split("\n").sample

Lascia un commento