PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Ruby] Sonderzeichen in String für bash ersetzen


Gast
2009-03-05, 14:33:09
Hallo,

ich habe einen String den ich für die bash fit machen will, d.h. Sonderzeichen müssen escaped werden.
Mit Leerzeichen klappt das auch ganz gut,

str.gsub!(' ','\ ')

ersetzt mir alle Leerzeichen dutch ein 'backslash-leerzeichen'. Jetzt habe ich aber auch '&' in meinem String, und die müssten auch ersetzt werden.

str.gsub!('&','\&')
klappt aber nicht so recht...

Wie mach ich das am besten?

lg

Gast
2009-03-05, 16:49:56
Na gut, dann mach ichs halt selber:

class String
def escapeSpecialChars
len = self.length
pos = 0

whitespace = ?\
a = ?\&
backslash = ?\\

while pos < len
if self[pos] == whitespace || self[pos] == a then
self.insert(pos, backslash.chr)
len = len + 1; pos = pos + 1
end
pos = pos + 1
end
return self
end
end

name_for_bash = 'this filename contains spaces & other strange characters.txt'
name_for_bash.escapeSpecialChars
puts name_for_bash


Im Moment hab ich nur whitespace und '&' ersetzt, aber andere Zeichen können leicht hinzugefügt werden.
Verbesserungsvorschläge?

lg

Gast
2009-03-05, 17:02:11
Verbesserungsvorschläge?

class String
def escapeSpecialChars

len = self.length
pos = 0

# ?<char> returns the ASCII code of <char>
specialChars = [?\ ,?\&]
backslash = ?\\

while pos < len
if specialChars.include?(self[pos]) then
self.insert(pos, backslash.chr)
len = len + 1; pos = pos + 1
end

pos = pos + 1
end
end
end
Wird schon...

lg