Domanda

Voglio modificare il seguente testo in modo che ogni riga inizi con il rivenditore:. Questo significa nessuna pausa di avvolgimento/linea. Per le linee che iniziano con il sistema, l'avvolgimento va bene.

Come sarebbe una soluzione in Ruby? Grazie

Questo si trova in un file .txt

Rivenditore: 5 secondi rimasti per agire
Dealer: Hitman2714 vince il piatto (9)
Rivenditore: mano #1684326626d
Rivenditore: Guitou699 ha 5 secondi rimasti a
atto
Rivenditore: Guit¤u699 ha scaduto
Rivenditore: Baj Hasan è rimasto 5 secondi a
atto
Rivenditore: Baj Hasan ha scaduto
Rivenditore: Hitman2714 ha 5 secondi rimasti
recitare
Rivenditore: Hitman2714 ha scaduto
Sistema: la garanzia notturna da $ 10.000
inizierà tra 20 minuti
Rivenditore: rivenditore: mano #1684326626d
Rivenditore: pustxtive pubblica il grande
cieco di 25

Output desiderato:

Rivenditore: 5 secondi rimasti per agire
Dealer: Hitman2714 vince il piatto (9)
Rivenditore: mano #1684326626d
Rivenditore: Guitou699 ha 5 secondi per agire
Rivenditore: Guit¤u699 ha scaduto
Rivenditore: Baj Hasan ha 5 secondi per agire
Rivenditore: Baj Hasan ha scaduto
Dealer: Hitman2714 ha 5 secondi per agire
Rivenditore: Hitman2714 ha scaduto
Sistema: la garanzia notturna da $ 10.000
inizierà tra 20 minuti
Rivenditore: rivenditore: mano #1684326626d
Rivenditore: Pospettive pubblica il Big Blind di 25

È stato utile?

Soluzione

remove_newline = false

ARGF.each_line do |line|
    if line =~ /^(Dealer|System): /
        puts if remove_newline
        remove_newline = ($1 == 'Dealer')
    end
    line.sub!(/\n/, ' ') if remove_newline
    print line
end

Se non ti dispiace eliminare l'involucro sulle righe del "sistema" e se il file è abbastanza piccolo, puoi fare qualcosa del genere:

puts ARGF.readlines.join('').gsub(/\n(?!Dealer: |System: )/, ' ')

Altri suggerimenti

previous = ''

ARGF.each_with_index do |line, i|
  line.chomp!
  unless i == 0
    if line =~ /^Dealer/ || line =~ /^System/
      puts previous
      previous = line
    else
      previous << (previous =~ /^System/ ? "\n" : " ") << line
    end
  else
    previous = line
  end
end
puts previous

Utilizza stdin e stdout per input e output.

content.gsub(/^(.*)\n(?!(Dealer|System|\Z))/, '\1 ')

grep

Perché usare Ruby se questo tipo di strumento esiste già

cat oldfile | grep ^Dealer: > newfile

rubino

Se questo dovrebbe far parte di un'applicazione di Ruby più grande, allora non c'è nulla di sbagliato nel farlo in Ruby.

content= File.read(oldfile)
content= content.grep(/^Dealer:/)
File.open(newfile, "w") { |f| f.write(content) }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top