чтение файла строк в ruby ​​1.8.7 - PullRequest
0 голосов
/ 07 апреля 2011

Я пытаюсь прочитать файл .strings на Mac с ruby ​​1.8.7.Ниже вывод IRB.Как видите, line - это строка комментария, которая начинается с /*.Но когда я выполняю команду start_with, она возвращает false, когда я ожидала, что она вернет true.Я подозреваю, что все это \000, которое портит сравнение строк.

Так что я могу сделать, чтобы удалить \000?

f = File.open("en.lproj/Localizable.strings")
#<File:en.lproj/Localizable.strings>

line = f.readline
"/\000*\000 \000T\000h\000i\000s\000 \000i\000s\000 \000a\000 \000s\000t\000r\000i\000n\000g\000 \000c\000o\000m\000m\000e\000n\000t\000 \000*\000/\000\r\000\n"

puts line
/* This is a string comment */

line.start_with?("/* ")
false

1 Ответ

2 голосов
/ 07 апреля 2011

Хм, попробуйте очевидное:

line.start_with?("/\000*\000 ")

Нулевые байты, "\000", не имеют никакого визуального представления, поэтому вы не видите их, когда вы puts line, но вы, вероятно,увидеть их, если вы передадите вывод скрипта через cat -v:

/^@*^@ ^@T^@h^@i^@s^@ ^@i^@s^@ ^@a^@ ^@s^@t^@r^@i^@n^@g^@ ^@c^@o^@m^@m^@e^@n^@t^@ ^@*^@/^@^M^@

* ^@ - это то, как cat -v представляет нулевой байт.

UPDATE: Если вы хотите удалить нулевые байты, используйте tr или tr!:

line.tr!("\000", '')

Я не уверен насчет формата .strings файл, так что вы должны выяснить это и выяснить кодировку строки в частности.Похоже, это может быть UTF-16, а может и нет;если это стандартная кодировка, отличная от ASCII, то вы должны использовать iconv для правильной сортировки кодировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...