В качестве имени файла можно использовать последовательность символов
Обновлено: 21.11.2024
Существует два способа представления текста в MATLAB®. Вы можете хранить текст в массивах строк . И в любой версии MATLAB вы можете хранить текст в массивах символов. Обычно символьные массивы используются для хранения фрагментов текста в виде символьных векторов . MATLAB отображает строки с двойными кавычками и векторами символов с одинарными кавычками.
Представление текста массивами строк
Вы можете сохранить любую последовательность символов размером 1 на n в виде строки, используя строковый тип данных. Заключите текст в двойные кавычки, чтобы создать строку.
Хотя текст "Hello, world" состоит из 12 символов, сама строка str представляет собой строку размером 1 на 1 или строковый скаляр . Строковый скаляр можно использовать для указания имени файла, метки графика или любой другой части текстовой информации.
Чтобы узнать количество символов в строке, используйте функцию strlength.
Если текст содержит двойные кавычки, используйте в определении две двойные кавычки.
Чтобы добавить текст в конец строки, используйте оператор "плюс" + . Если переменную можно преобразовать в строку, функция plus преобразует ее и добавит.
Вы также можете объединить текст с помощью функции добавления.
Строковая функция может преобразовывать различные типы входных данных, например числовые значения, дату и время, продолжительность и категориальные значения. Например, преобразуйте вывод числа пи в строку.
Вы можете хранить несколько фрагментов текста в массиве строк. Каждый элемент массива может содержать строку с разным количеством символов без заполнения.
str представляет собой массив строк размером 2 на 3. Длину строк можно найти с помощью функции strlength.
Массивы строк поддерживаются во всех продуктах MATLAB и MathWorks®. Функции, которые принимают массивы символов (и массивы ячеек из символьных векторов) в качестве входных данных, также принимают массивы строк.
Представление текста с помощью векторов символов
Чтобы сохранить последовательность символов размером 1 на n в виде вектора символов, используя тип данных char, заключите ее в одинарные кавычки.
Текст "Hello, world" имеет длину 12 символов, и chr сохраняет его в виде вектора символов размером 1 на 12 символов.
Если текст содержит одинарные кавычки, используйте в определении две одинарные кавычки.
Векторы символов имеют два основных применения:
Чтобы указать отдельные фрагменты текста, такие как имена файлов и метки графиков.
Для представления данных, закодированных с помощью символов. В таких случаях вам может понадобиться легкий доступ к отдельным символам.
Например, вы можете сохранить последовательность ДНК в виде вектора символов.
Вы можете получить доступ к отдельным символам или подмножествам символов с помощью индексации, как если бы вы индексировали числовой массив.
Объединяйте вектор символов с помощью квадратных скобок так же, как вы объединяете другие типы массивов.
Начиная с R2019a, вы также можете объединять текст с помощью append . Рекомендуется использовать функцию append, поскольку она последовательно обрабатывает массивы строк, символьные векторы и массивы ячеек из символьных векторов.
Функции MATLAB, которые принимают массивы строк в качестве входных данных, также принимают вектора символов и массивы ячеек из векторов символов.
См. также
Связанные темы
Открыть пример
У вас есть модифицированная версия этого примера. Хотите открыть этот пример со своими правками?
Благодаря достижениям в области вычислительной техники перемещение файлов между различными платформами стало намного проще, чем всего несколько лет назад. Принятие стандарта UNICODE для кодировки символов и кросс-совместимости между операционными системами привело к тому, что проблемы с открытием файла, полученного в виде вложения в электронное письмо, загруженного с веб-сайта или доступного на платформе облачного хранилища, стали крайне редкими, но проблемы все еще могут возникать. .
Хотя подавляющее большинство настольных компьютеров по-прежнему используют ОС Microsoft Windows или Macintosh, существует множество других операционных систем (и файловых систем), которые могут взаимодействовать с файлами в различных точках. Сотовые телефоны, ленточные накопители, сетевое оборудование, телевизоры и даже цифровые камеры сегодня поддерживают файловые системы.
Большинство современных файловых систем и операционных систем, в которых они используются, поддерживают гораздо более длинные имена файлов, чем персональные компьютеры, работающие под управлением Microsoft DOS и ранних версий Windows. Эти компьютеры использовали имя файла 8.3, которое позволяло восемь символов слева от точки и три символа справа, чтобы указать компьютеру, какое приложение использовать для его отображения. Однако по-прежнему можно столкнуться с проблемами, связанными с длиной имени файла.
Принятие правильных соглашений об именах файлов может помочь гарантировать, что файлы будут работать с различными операционными системами и форматами дисков, такими как Windows, Linux, Mac OS X и UNIX. Именование файлов также является важным фактором при передаче файлов через Интернет, когда может быть неочевидно, какая компьютерная платформа использовалась при первоначальном создании файлов.
Имена файлов могут быть как описательными, так и не описательными.Описательные имена файлов полезны для небольших четко определенных проектов с существующими схемами идентификации, которые связывают цифровой объект с исходным материалом. Однако непоследовательное применение терминов или опечатки будут способствовать ошибкам индексации и сортировки. Неописательные имена файлов обычно представляют собой генерируемые системой последовательные числовые строки, такие как цифровой идентификационный номер, и часто связаны с метаданными, хранящимися в другом месте. Неописательные имена файлов часто создаются для крупномасштабных проектов оцифровки и могут использовать цифровой идентификационный номер и числовые последовательности для обозначения пакетных или родительско-дочерних отношений. Преимущество неописательных имен заключается в том, что меньше вероятность повторения или неуникальных имен файлов в структуре данных.
Некоторые приложения и компьютерные скрипты могут не распознавать пробелы или иначе обрабатывать ваши файлы при использовании пробелов. Лучше всего заменять пробелы в именах файлов подчеркиванием (_) или дефисом (-). В приложении B бюллетеня NARA 2015-04 указано, что пробелы в именах файлов запрещены. Веб-среды переводят пробелы и отображают их как «%20». Например, «Имя файла.doc» будет отображаться в URL-адресе как «Файл%20Name.doc», где?. Это изменение может привести к путанице при определении фактического имени файла.
Следует избегать пунктуации, символов или специальных символов (точки, запятые, круглые скобки, амперсанд, звездочки и т. д.). Некоторые из этих символов используются в операционных системах для выполнения определенных задач, например для обозначения уровней папок в продуктах Microsoft и операционных системах Mac. Точки используются для идентификации форматов файлов, таких как .jpg и .doc.
Имена файлов и пути, содержащие определенные символы или последовательности символов, могут вызвать проблемы при использовании в создании имени файла или пути:
- Дефисы в начале: тире в начале могут вызвать проблемы, когда программы вызываются с именем файла в качестве параметра, поскольку первый символ или символы имени файла могут быть интерпретированы как переключатель параметров.
- Управляющие символы, такие как перевод строки, возврат каретки и экранирование. Управляющие символы в имени файла могут привести к неожиданным результатам в сценариях оболочки и в ведении журнала.
- Пробелы. Пробелы могут вызывать проблемы со сценариями, а также в случаях, когда имя файла не заключено в двойные кавычки.
- Недопустимые кодировки символов. Кодировки символов могут затруднить правильную проверку имен файлов и путей. (См. IDS11-J. Внесите любые изменения в строку перед проверкой).
- Префиксы пространств имен и соглашения. Префиксы пространств имен могут привести к неожиданному и потенциально небезопасному поведению, если они включены в путь.
- Интерпретаторы команд, сценарии и синтаксические анализаторы: символы, имеющие особое значение при обработке командным интерпретатором, оболочкой или синтаксическим анализатором.
Пример несовместимого кода
В следующем примере несовместимого кода небезопасные символы используются как часть имени файла.
Платформа может определять собственное сопоставление небезопасных символов. Например, при тестировании в дистрибутиве Ubuntu Linux этот несоответствующий пример кода привел к следующему имени файла:
Соответствующее решение
Используйте описательное имя файла, содержащее только ранее описанное подмножество ASCII.
Пример несовместимого кода
В этом примере несоответствующего кода создается файл с вводом от пользователя без очистки ввода.
Проверки имени файла не выполняются, чтобы исключить нежелательные символы. Если злоумышленник знал, что этот код находится в программе, используемой для создания или переименования файлов, которые впоследствии будут использоваться в сценарии или каком-либо автоматизированном процессе, злоумышленник может выбрать определенные символы в имени выходного файла, чтобы запутать более поздний процесс в злонамеренных целях. .
Соответствующее решение
Это совместимое решение использует белый список для отклонения имен файлов, содержащих небезопасные символы. Может потребоваться дополнительная проверка ввода, например, чтобы гарантировать, что имя файла или каталога не заканчивается точкой.
Исключения
FIO99-J-EX0: программа может принимать имя файла или путь, в котором используются «небезопасные» символы, при условии, что разработчик определил, что файл не используется в ограниченном приемнике, таком как интерпретатор команд, оболочка, синтаксический анализатор, регистратор или другая сложная подсистема, которая придает этим символам особое значение.
Оценка рисков
Отказ от использования только безопасного подмножества ASCII может привести к неправильной интерпретации данных.
P4
L3
Автоматическое обнаружение
Сопутствующие рекомендации
Выбор имен файлов и других внешних идентификаторов [AJN]
CWE-116, неправильное кодирование или экранирование вывода
Библиография
Набор 7-битных кодированных символов ISO для обмена информацией
Часто задаваемые вопросы по UTF-8 и Unicode для UNIX/Linux
12 Комментариев
Роберт Сикорд (менеджер)
Я не могу сказать, говорит ли это правило, что следующие символы:
может или не должен использоваться в именах файлов.
Обсуждение чувствительности к регистру вызывает дополнительную путаницу. Если мы не требуем использования всех букв верхнего или нижнего регистра в именах файлов, я бы предложил удалить это обсуждение как неуместное, вводящее в заблуждение и сбивающее с толку в контексте этого правила.
Роберт Сикорд (менеджер)
Я внес некоторые изменения, которые грозился внести выше. Есть еще несколько альтернативных объяснений запрета на использование символов, отличных от букв, цифр и переносимых знаков препинания, включая алфавиты и символы-разделители имен.
Роберт Сикорд
Следующие зарезервированные символы:
- (больше)
- : (двоеточие)
- " (двойные кавычки)
- / (косая черта)
- \ (обратная косая черта)
- | (вертикальная полоса или труба) <ли>? (вопросительный знак)
- * (звездочка)
Вы не можете использовать двоеточие (:) в именах файлов и папок, потому что Mac OS 9 (Classic) использует этот символ для разделения каталогов в путях. Кроме того, некоторые приложения не позволяют использовать косую черту (/) в именах элементов.
Эти символы могут не поддерживаться или с ними может быть сложно работать при экспорте в определенные форматы файлов, такие как EDL, OMF или XML.
Пробелы, такие как пробелы, табуляция, перевод строки и возврат каретки (последние два встречаются редко)
Пробелы обрабатываются по-разному в разных языках программирования и операционных системах, поэтому некоторые сценарии обработки и приложения могут обрабатывать ваши файлы не так, как ожидалось. Наиболее консервативные имена файлов избегают использования пробельных символов и вместо них используют символ (подчеркивание) _.
По какой причине мы должны просто сократить этот список до букв, цифр, точек (которые необходимы для файлов 8.3) и символов '_'?
Хуан Карлос Эррера Маркетти
Ёдзо ТОДА
Я изменил ссылку, чтобы она указывала на страницу библиографии пространства C Coding Standard, но она выглядит так
Confulence распознает эту ссылку как внешний сайт, а не в другом месте.
кто-нибудь, пожалуйста, исправьте ссылку (два вхождения), если это необходимо.
Давид Свобода
Исключение требует дополнительной работы. Что такое ограниченный приемник в этом контексте?
Роберт Сикорд
Я немного расширил текст, в основном повторив текст из вступления.
Роберт Сикорд
Неясно, что обозначают "символы разделения пространств имен". Мое лучшее предположение таково:
Если это намерение, лучше сказать "префикс пространства имен и соглашения" или что-то в этом роде.
Роберт Сикорд
Не заканчивайте имя файла или каталога пробелом или точкой. Хотя базовая файловая система может поддерживать такие имена, оболочка Windows и пользовательский интерфейс этого не делают. Однако допустимо указывать точку в качестве первого символа имени. Например, ".temp".
Это ограничение нельзя применить, просто используя безопасное подмножество ASCII.
Возможно, это следует назвать «Использовать консервативные соглашения об именах файлов», что определенно является кратким, но не точным заголовком, но мы можем быть более точным в правиле, которое, я думаю, должно говорить: используйте 8.3 с этими символами "[^A-Za -z0-9._]", но не заканчиваться точкой. Даже код для проверки этого будет сложным.
Роберт Сикорд
Это правило также может принадлежать FIO, потому что создание имен файлов — это половина уравнения.
Давид Свобода
Теперь я думаю, что это правило следует понизить до рекомендательного или вообще отменить. Что следует учитывать:
Мы не можем придумать подмножество символов, безопасное для всех файловых систем. (То есть безопасный, который был бы достаточно ограниченным, был бы слишком ограничительным, чтобы быть полезным). Философия Java «напиши один раз — запускай где угодно» предает нас здесь. Здесь нам пришлось бы отказаться от независимости от платформы и сказать: уважайте ограничения имен файлов, поддерживаемые вашей файловой системой. Недостаточно сосредоточиться на платформах, а скорее на файловых системах. Вы можете смонтировать файловую систему HFS+ на компьютере с Linux, и тогда вам придется иметь дело с ограничениями имен файлов в стиле Mac на платформе Linux.
Это также относится к аналогам C и C++ этого правила (хотя они являются всего лишь рекомендациями)
Наконец, все плохие случаи, упомянутые во введении, рассматриваются другими правилами:
Дефисы в начале представляют собой проблему только в том случае, если в команде оболочки используется ненадежное имя файла, что нарушает IDS07-J. Не передавайте в метод Runtime.exec() ненадежные, непроверенные данные. То же самое относится к пробелам и управляющим символам, таким как перевод строки, возврат каретки и escape-последовательность.
Что касается недопустимых кодировок символов и префиксов пространств имен, решение хорошо рассмотрено в FIO16-J. Канонизировать имена путей перед их проверкой.
Мы могли бы понизить это до рекомендации (аналоги C и C++ являются рекомендациями), и поэтому нам не нужно определять точную спецификацию допустимых имен файлов. Но я не уверен, что это правило содержит какую-либо информацию, не подпадающую под действие других правил.
Роберт Сикорд
Я не против этой идеи. Я вижу основную проблему в том, что есть и другие решения, такие как экранирование странных символов в именах. Давайте продолжим и перейдем к рекомендациям, а также одновременно перейдем к разделу файлового ввода-вывода.
Елена имеет степень бакалавра компьютерных наук и степень магистра прикладного переводоведения. Последнее десятилетие она работает неполный рабочий день переводчиком-фрилансером.
В этом уроке мы расскажем об именах файлов, командах вывода файлов и подстановочных знаках в Linux. Кроме того, мы определим, как мы можем отображать текстовые и двоичные файлы. Обновлено: 01.04.2021
Что такое Linux?
Linux – это бесплатная операционная система с открытым исходным кодом, основанная на UNIX. Вы можете изменить в ней почти что угодно и распространять ее от своего имени. Пользователи могут изменять и создавать варианты исходного кода, известные как дистрибутивы, для компьютеров и других устройств.
Имена файлов в Linux
Имя файла (или имя файла) – это строка или последовательность символов, которая используется для идентификации файла. Имена присваиваются файлам в операционных системах Unix, чтобы пользователи могли легко их идентифицировать и облегчить поиск в будущем. Правила именования файлов приведены в списке ниже:
- Имя файла не может содержать косую черту (/). Этот символ зарезервирован для использования в качестве имени корневого каталога и в качестве разделителя каталогов.
- Можно использовать нулевые символы. Этот символ используется для завершения сегментов текста.
- Пробелы разрешены, хотя их лучше избегать, поскольку они могут быть несовместимы с устаревшим программным обеспечением.
- Имена файлов могут содержать только буквенно-цифровые символы, знаки подчеркивания, дефисы и точки. Другие символы, такие как знаки доллара, процента и скобки, имеют особое значение для оболочки и могут отвлекать при работе.
- Имена файлов никогда не должны начинаться с дефиса.
- Имена файлов были ограничены 14 байтами (что эквивалентно 14 символам) в ранних системах UNIX. Однако современные системы поддерживают длинные имена файлов, обычно до 255 байт.
- В некоторых операционных системах имена файлов состоят из двух частей: имени, назначаемого пользователем, и расширения, описывающего тип файла. Они разделены точкой.
- Имена файлов должны быть уникальными в каталоге. Повторяющиеся имена файлов могут находиться в разных каталогах, но не в одном и том же.
Команды вывода списка файлов в Linux
- a перечисляет все файлы, включая скрытые
- l отображает список файлов в длинном формате, включая сведения о файле, такие как размер, отметка времени и владелец.
- F добавляет косую черту после имени для каталогов, звездочку для исполняемых файлов и знак (@) для связанных файлов.
- r меняет порядок сортировки на обратный (по алфавиту или по времени).
- t сортирует список по времени создания каждого файла.
Подстановочные знаки в Linux
Подстановочные знаки полезны во многих отношениях. Команды могут использовать подстановочные знаки для выполнения действий с несколькими файлами одновременно или для поиска части фразы в текстовом файле. Существует два основных способа использования подстановочных знаков, которые обсуждаются ниже.
Стандартные подстановочные знаки
Оболочка часто использует стандартные подстановочные знаки. Они используются различными утилитами командной строки для работы с несколькими файлами. Они могут содержать:
-
<ли>? – Вопросительные знаки могут представлять любой отдельный символ.
- * – звездочки могут обозначать любое количество символов.
- [ ] — квадратные скобки определяют диапазон.
- – Фигурные скобки разделяются запятыми, и каждый термин должен быть названием чего-либо или подстановочным знаком.
- [!] – эта конструкция аналогична конструкции [ ].
- \ — обратная косая черта используется в качестве управляющего символа.
Регулярные выражения
Регулярные выражения популярны со многими другими командами. Они в основном используются для любой формы манипулирования текстом. Они могут содержать:
-
<ли>. - Точка будет соответствовать любому одиночному символу. Это эквивалентно использованию вопросительного знака (?) в стандартных выражениях с подстановочными знаками.
- \ — обратная косая черта используется в качестве управляющего символа. <ли>.* — точка со звездочкой используется для соответствия любой строке, эквивалентной * в стандартных подстановочных знаках.
- * – звездочка используется для соответствия предыдущему элементу ноль или более раз.
- ^ — Знак вставки означает "начало строки".
- $ – знак доллара означает "конец строки".
- [ ] — квадратные скобки определяют диапазон.
- [^] — эта конструкция эквивалентна [!] в стандартных подстановочных знаках.
- | – Подстановочный знак "труба" устанавливает логическое ИЛИ между подстановочными знаками.
Текст и двоичные файлы
Двоичный формат используется для таких вещей, как изображения, исполняемые файлы и сжатые данные. Обычно они являются наиболее компактным средством хранения данных, поскольку используют сжатие данных. Программы могут выполнять эти типы файлов очень быстро. Однако есть и некоторые недостатки при использовании двоичных файлов. Часто возникают проблемы с переносимостью или возможностью использования этих файлов с другим оборудованием и программным обеспечением. Во-вторых, они не удобочитаемы для человека, что может затруднить их исправление или изменение. Если программа, создавшая двоичный файл, больше недоступна, файл может стать бесполезным, а его данные потеряны навсегда.
Важным правилом философии Unix является по возможности избегать хранения данных в двоичных файлах. Их следует хранить в виде простых текстовых файлов, поскольку текст является универсальным интерфейсом между программами и людьми. Именно использование текстовых выходных и входных данных позволяет программам в Unix так легко и эффективно работать вместе (т. е. за счет использования конвейеров). Хотя текстовые файлы могут быть не такими быстрыми (или такими маленькими), как двоичные файлы, это легко компенсируется высокой скоростью современных процессоров (и низкой стоимостью памяти и хранилища).
Резюме урока
Linux — чрезвычайно гибкая и бесплатная операционная система, которую пользователи могут настроить по своему усмотрению в соответствии с предполагаемым приложением или предпочтениями пользователя. Вот простое описание UNIX: В системе UNIX все является файлом. Если что-то не является файлом, это процесс. Система Linux не различает файл и каталог, поскольку каталог — это просто файл, содержащий имена других файлов. Существует множество версий Linux, в которых используются одни и те же основные команды и прикладные программы. Подстановочные знаки полезны не только для перечисления файлов. Большинство команд Linux принимают не только параметры, и вы можете использовать подстановочные знаки, чтобы значительно варьировать вывод.
Читайте также: