Na jednom z mojich protokolových súborov mám nižšie skryté hodnoty a farebné kódy ASCII,
...WAITING^H^H^H^H^H^H^H^H^H^H
Podarilo sa mi odstrániť farebné kódy ASCII pomocou metódy uvedenej nižšie,
gsub(/e[(d+)(;(d+))?m/, "")
ale stále nemôžem odstrániť vyššie uvedené skryté znaky. Existuje nejaký spôsob, ako sa ich zbaviť?
odpovede:
7 pre odpoveď č. 1Backspaces?
Ak ctrl-H
znaky sú medzery:
puts "foobbbbar"
#=> "bar"
puts "foobbbbar".delete("b")
#=> "foobar"
POZNÁMKA: delete
je tu v poriadku, pretože ho používame iba s jednou postavou.
Alebo „^ H“ podreťazec?
Ak ctrl-H
znakov "^H"
:
puts "foo^H^H^Hbar".gsub(/^H/,"")
#=> "foobar"
POZNÁMKA: delete
tu by nefungoval, pretože by tiež odstránil všetky H
znak z reťazcov, nielen podreťazec ^H
, Tiež pomocou delete("^H")
prostriedky delete every character that isn"t a "H"
. Takže:
"foo^H^H^Hbar".delete("^H") => "HHH"
skúška
S:
bytes = [46, 46, 46, 87, 65, 73, 84, 73, 78, 71, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 91, 32, 32, 32, 79, 75, 32, 32, 32, 93, 10, 27, 91, 63, 49, 50, 108, 27, 91, 63, 50, 53, 104, 68, 111, 110, 101, 33, 10, 10]
Dostaneme :
string = bytes.map(&:chr).join
string # => "...WAITINGbbbbbbbbbb[ OK ]ne[?12le[?25hDone!nn"
puts string
# [ OK ]
# Done!
#
Bajty sa rovnajú 8
sú backspace a odstránia sa WAITING
keď sa zobrazuje s puts
. Prvá alternatíva by mala fungovať dobre:
puts string.delete("b")
# ...WAITING[ OK ]
# Done!
POZNÁMKA: Toto funguje iba na pôvodné údaje, v ktorých sú backspace bajty 8
. Akékoľvek kopírovanie a vkladanie, použitie cat
, |
alebo textový editor ich môže previesť na "^H"
alebo iný reťazec.