Pull to refresh
10
0
Илья Чалов @ilyachalov

User

Send message

Мне удобнее видеть кучу ошибок, как это происходит по умолчанию. Но всё равно, спасибо за совет. Я пользовался переменной $DebugPreference, а про упомянутую вами был не в курсе. Сейчас почитал про нее в документации.

Я написал что-то похожее на PowerShell:

Get-ChildItem -File -Recurse |
    ForEach-Object {
        $old = $_.Name
        $new = $old -replace '^(\d\d)-(\d\d)_(.*)', '$1-0$2_$3'
        if ($old -ne $new) {
            $path = $_.DirectoryName
            Invoke-Expression "git mv $path\$old $path\$new"
        }
    }

Спасибо еще раз за подсказку, плюсанул в карму.

При просмотре списка файлов при вашем подходе файлы в списке могут отсортироваться не по порядку (зависит от системы и от способа сортировки).

После 00-99 спокойно следует 00-100

Конечно, можно было и так, но это неудобно из-за сортировки. Некоторые системы, в которых я просматриваю списки файлов, отображают файлы так, что файл 00-100 идет в списке вместе с файлами 00-10, 00-11, 00-12 и т.д., а не после 00-99, как мне нужно. Насколько я помню, в веб-интерфейсе «Гитхаба» файлы сортируются именно так.

Это 1 строчка на bash, но никак не статья в хабр.

Тут не просто переименование файлов или переименование файлов в Git-репозитории, а переименование файлов на веб-сервисе «Гитхаб». Я думал, что мне посоветуют какой-нибудь способ автоматизации на самом этом веб-сервисе. Там, вроде, есть средства автоматизации, но я с ними незнаком. Пока ничего такого не посоветовали, к сожалению.

складывать 100500 файлов с программным кодом, никак друг с другом не связанных, в одну папку - это ужасно

В данном случае это не совсем программный проект, поэтому подход другой. Пользоваться этими файлами удобно, если плясать от чтения учебника. Я делаю этот проект для людей, которые будут учиться по данному учебнику, для них группировка по главам удобна. У меня уже был подобный опыт с учебником Роберта Лафоре пару лет назад. Получилось неплохо.

У меня осмысленные названия, их можно увидеть в статье. Например:

00-000_helloworld.cpp
00-001_helloworld-wait.cpp
00-002_cpp17compat.cpp
...и так далее

За осмысленность отвечает часть названия, которая идет после нумерации. Там, где автор учебника даёт названия файлам, я оставляю авторские названия, только добавляю свою нумерацию в начало названия файла (автор учебника не всем файлам дает достаточно информативные названия, потому что это лишь учебные примеры; сам учебник достаточно хорош, там о наименовании файлов, переменных и т.п. довольно емко написано).

Хорошее замечание, спасибо. Как-то забыл про этот сервис (в отличие от Stack Overflow, на котором я задал вопрос, но отклика пока не получил). Но я не уверен, что на указанном сервисе можно задавать вопросы с большим текстом (сравнимым по размерам со статьей), содержащим разное сложное форматирование. Я заходил туда, там обычно вопросы на несколько абзацев и почти без форматирования. Этого недостаточно.

Мне кажется, нужна более сложная классификация. Вместо простой-средний-сложный, нужно что-то вроде

  • для вообще начинающих (домохозяйка)

  • для начинающих, но знакомых с основами (джуниор)

  • для среднего уровня (сеньор)

  • для сложных тем (тимлид)

И описание этих категорий, наверное, стоит сделать более подробным.

Среди 100500 способов переименовать файлы автор выбрал, пожалуй, самый странный.

Мне нравится язык PowerShell, поэтому я пишу скрипты на нем. Но эта статья написана в том числе и для того, чтобы узнать возможные альтернативы. Кое-что мне посоветовали в комментариях. Я благодарен тем, кто посоветовал.

Интересно, как так получилось, что у него в репозитории все файлы .cpp оказались вот с такими вот именами?

Я читаю учебник по языку C++ и создаю файлы с кодом для всех примеров и упражнений из этого учебника. Файлы нумерую по принципу 00-00, где первые две цифры — для номера главы учебника, следующие две цифры (после дефиса) — номер примера/упражнения в рамках главы.

И какую задачу призвано решить переименование?

Количество примеров/упражнений в рамках главы превысило 99 штук, цифр стало не хватать, этого я изначально не предвидел. Поэтому решил увеличить место для номера с двух до трех цифр. Теперь доступна нумерация до 999 штук.

Мне интереснее написать скрипт на PowerShell.

Эти примитивные операции описаны в учебнике по гиту

В любом случае, спасибо за ссылку, мне всегда интересно добавить хорошую книжку в коллекцию. Но эту я уже знаю, читал. В статье есть ссылка на эту книгу.

Спасибо за подсказку. Я попробую этим воспользоваться. Но мне так же интересно попробовать переписать это и на PowerShell.

При выборе уровня «Средний» я ориентировался на справку Хабра. Там сказано, что «Средний» уровень подразумевает знание читателем основ, которые автор не будет разъяснять. В данной статье я не объясняю, что такое «Git», для чего нужен «GitHub», как работать из командной строки и что это такое, что такое программа-оболочка, что такое программа-«эмулятор терминала», что такое регулярные выражения, что такое скрипт и так далее. То есть в этой статье огромное количество терминов, которые читатель должен знать и понимать, я это всё не разъясняю. Поэтому уровень статьи «Средний», хотя я бы с удовольствием выбрал «Простой», но данная статья объективно ему не соответствует.

Я работаю в «Windows 10», не в «Linux», но спасибо за ваш код. Насколько я понял, вы предлагаете таки использовать команду git mv, но до ее запуска в строке конструировать параметры для нее в нужном виде. Таким образом, всё же можно будет использовать регулярные выражения, несмотря на то, что git mv сама по себе их не поддерживает.

Думаю, это можно реализовать и в PowerShell.

Я могу вас понять. С другой стороны, как автор может определить необходимый уровень статьи, который подходит для Хабра? Я не видел в справке Хабра никаких конкретных условий по этому поводу. Я готов соблюдать такие условия, если их пропишут.

Вы правы, я многого не понимаю. Если вам несложно, может быть, вы дали бы мне какие-нибудь более конкретные замечания? Я был вам за это благодарен.

вы вообще не понимаете, что такое github и зачем он нужен

Я использую этот веб-сервис для хранения файлов с кодом. Это удобно. От администрации веб-сервиса я никаких страйков за это не получал, значит, мне кажется, всё в порядке.

поймите, что писать пространные статьи о настолько рутинных операциях, которые буквально каждый разработчик делает несколько раз в день, на Хабре – это плохая идея. Вас просто не поймут.

Вы молодец, у вас много знаний. Но я рассчитывал на людей, которые только начинают изучать Git, GitHub и так далее. Такие есть, их много. Для них эта статья будет интересной и полезной.

Дело в том, что опытные разработчики не будут писать такие статьи, как вы и сказали сами, потому что для них это слишком просто. Откуда тогда начинающим разработчикам узнавать основы? Кто пишет для них? Мне кажется, Хабр предназначен не только для опытных разработчиков, но и для начинающих.

В частности, и про это тоже.

Я недавно начал использовать Git и GitHub. Цель написания этой статьи — возможное получение полезных советов от опытных пользователей. Я думал, возможно, кто-нибудь посоветует альтернативные способы переименования множества файлов, более оптимальные, чем я описал.

Почему именно эти 2 компилятора?

MSVC я взял, потому что работаю с Windows 10 (мне кажется логичным использовать для Windows компилятор Microsoft). А в Ubuntu я выбирал между GCC и Clang и в итоге выбрал GCC, так как у него стаж на 20 лет побольше (это значит, что документации и примеров в интернете должно быть больше, для начинающих это важно).

Для кириллицы в последнее время использую только этот способ

Ваш код, насколько я понял, предназначен для работы с широкими символами (wchar_t)? То есть подразумевается кодировка UTF-16 (или UCS-2)? В статье упор сделан на UTF-8, то есть предполагается работа с узкими символами (char). В Linux это работает без костылей, а в Windows, думаю, в будущем тоже будет работать. Они там, насколько я знаю, сейчас активно над этим трудятся.

Вы правы, в Windows 10 есть проблемы со считыванием из консоли символов, не входящих в таблицу ASCII, если мы работаем с кодировкой UTF-8. Например, возьмем простой код

#include <iostream>

int main()
{
    char str[100];
    std::cout << "Введите слово: "; std::cin >> str;
    std::cout << "Вы ввели: " << str << '\n';
    return 0;
}

Тестируем в консоли Windows 10:

C:\Users\Илья\source\repos\test>input
Введите слово: test
Вы ввели: test

C:\Users\Илья\source\repos\test>input
Введите слово: тест
Вы ввели:

Вместо русских букв (и любых не ASCII символов) std::cin возвращает нулевые байты.

С другой стороны, код приведенной выше простой программы успешно работает с любыми символами UTF-8 в Ubuntu (у меня через WSL), а также в веб-компиляторе «OnlineGDB.com». И даже в Windows (как видно из листинга выше) при обучении пояснительные надписи можно вывести на русском (что лучше, чем ничего), а ввод делать на латинице, параллельно продемонстрировав прекрасную работу этого же кода в Linux с любыми символами.

Я согласен, что идеальная кроссплатформенность (для всех операционных систем) невозможна. В статье речь шла про Windows 10 и дистрибутив «Ubuntu» Linux. Использованные при этом компиляторы и ключи описаны в статье.

Согласен, простой «разворот» байтов в строке в случае работы с UTF-8 «поломает» символы, которые не из таблицы ASCII. Но, мне кажется, можно сначала дать такое задание для символов из таблицы ASCII, а затем объяснить, почему это не сработает в случае кодировки UTF-8, это в качестве дополнительного урока. Можно написать программу, которая «расшифровывает» исходную и развернутую строки в числа (байты), чтобы ученику было понятнее. На выходе что-то вроде такого:

Hello, World!
48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21
!dlroW ,olleH
21 64 6c 72 6f 57 20 2c 6f 6c 6c 65 48

Привет, ?!
d0 9f d1 80 d0 b8 d0 b2 d0 b5 d1 82 2c 20 f0 9f 98 8e 21
!���� ,�ѵвиЀџ�
21 8e 98 9f f0 20 2c 82 d1 b5 d0 b2 d0 b8 d0 80 d1 9f d0

Тут видно, как в первом случае (символы из таблицы ASCII) разворот байтов работает, а во втором случае (есть символы и из ASCII, и не из ASCII) - не работает. По-моему, такой урок будет гораздо нагляднее, чем только с ASCII.

Я был бы вам благодарен, если бы вы привели конкретный (код, если он короткий, или вместо кода ссылку) один пример задачи и ее решения, которые простые в имеющемся учебнике с ASCII, но станут сложными (или вообще не будут работать) при использовании литералов в кодировке UTF-8. (Я не сомневаюсь в существовании таких задач и в ваших словах вообще, но когда есть конкретный пример, то понятнее, о чем идет речь.)

Information

Rating
Does not participate
Location
Выборг, Санкт-Петербург и область, Россия
Registered
Activity