Xpoint
   [напомнить пароль]

Прописные, строчные буквы при работе со строками

Метки: [без меток]
2011-06-14 15:50:38 [обр] fireprophet[досье]

Здравствуйте!

Стоит задача проверки существования файла, однако в разных версиях ОС, имена папок в пути к файлу отличаются регистром (в NT: /WINDOWS/system32, в 7-ке: /Windows/System32), при этом сами файлы должны распознаваться одинаково для дальнейшей работы.
Наверное для этого надо использовать регекспы, но мне показалось, что в данном случае это не решение, можно было бы сравнивать строки с "=~ /$path/ig", но до этого я пользовался для проверки просто условием if(-e $path)...
Каким образом можно произвести проверку существования пути без учета регистра?
Спасибо!

спустя 3 часа 9 минут [обр] Евгений Седов aka KPbIC(38/176)[досье]
М Перенесено из форума "Программирование::Perl::Основы"
спустя 5 часов [обр] Jared(0/26)[досье]

Насколько мне известно, в виндах пути к файлам или деиректориям case insensitive. То есть при наличии /windows/system32 в любом регистре -e даст 1 как бы вы не записывали этот путь.

print 'ok' if(-e "/WiNdOWS/sYsTem32");

Винды под близко рукой нет, проверить не могу.

спустя 49 минут [обр] fireprophet[досье]
О, господи! Очень рад что кто-то отписался, однако горе мне я не написал, что речь идет о Линухе, а мою тему модеры отправили в виндовый раздел...( Так что же делать в случае Линуха?
спустя 18 минут [обр] Евгений Седов aka KPbIC(38/176)[досье]

/WINDOWS/system32, "NT и 7-ка"... Какой-то неправильный у вас Linux.

Расскажите на более высоком уровне что вы пытаетесь сделать, зачем вам эта возня с регистрами понадобилась?

спустя 5 минут [обр] fireprophet[досье]
Тока не отрубайтесь, замучился уже... Короче говоря есть скрипт, на перле писанный, под убунтой загружаемый, но работает он с файлами реестра винды, но для начала надо их найти, а путь у разных версий разный, соответственно, надо проверять действительность без учета регистра...
Вы хотя-бы подскажите как можно переименовать файл, я-бы все файлы к нижнему регистру привел-бы, но mv консольная кричит, что sam и SAM один и тот же файл...rename перловая вообще не работает...((
спустя 1 минуту [обр] fireprophet[досье]
Ищет на других разделах, на которых винда и файлы реестра...
спустя 3 минуты [обр] fireprophet[досье]
Если sam на абракадабру переименовывать то пожалйста, mv работает, а если просто перевести в прописные, то это он как переименование не воспринимает...
спустя 2 минуты [обр] fireprophet[досье]
Но при этом к регистру при поиске чувствительны, что консольные функции поиска, что библиотечные, да и не вариант это мне-ж с ними (файлами) работать потом надо, а если точно не знать каким будет название файлов, то мне придется шибко много переписывать кода...
спустя 5 минут [обр] Jared(0/26)[досье]
У вас на линухе смонтирован ntfs раздел?
спустя 1 минуту [обр] Евгений Седов aka KPbIC(38/176)[досье]
$ man 1 find
Посмотрите опцию -iname. Можно попробовать использовать эту утилиту вместо того метода, который используется в вашем скрипте.
спустя 19 секунд [обр] fireprophet[досье]
Да, предварительно смонтированы все разделы..
спустя 58 секунд [обр] fireprophet[досье]
А как переименовать?)
спустя 1 минуту [обр] fireprophet[досье]
Не хотелось бы показаться наглым нубом, я просто нуб, пробовал многое, но работает как я описал...
спустя 6 минут [обр] Евгений Седов aka KPbIC(38/176)[досье]
Переименовать можно в два этапа:
$ mv SAM UniquePrefixByFireprophet_SAM
$ mv UniquePrefixByFireprophet_SAM sam
спустя 2 минуты [обр] fireprophet[досье]
Спасибо тебе огромное, так и поступлю, хотел найти какое-нибудь более эстетичное решение, но честно говоря это желание как-то поубавилось...) Еще раз спасибо, в слудующий раз будут постить с более развернутой темой, чтобы не было казусов с переносом в виндовый раздел форума)
спустя 14 часов [обр] Алексей Рюмин aka Dwarf(6/864)[досье]
М Перенесено из форума "Программирование::Perl::Windows аспекты"
Powered by POEM™ Engine Copyright © 2002-2005