День 19 — задания
Практика прошла по ходу чтения — в блоках «Попробуйте сейчас». Здесь итог: всё, что сверит course check 19. Если какой-то пункт пропустили, вернитесь к странице, которая указана рядом. Оглавление дня:
course toc 19Программы дня читают файл по имени. Проверка запускает их в отдельном каталоге, куда кладёт свой orders.csv или stock.txt: часть файлов — пример из условия, часть скрыта. На скрытом случае проверка покажет файл и то, что напечатала программа, но не покажет, что было нужно, — это решаете вы по условию.
1. Байты и len — страница 1
1.1. Посчитайте байты и буквы одной строки в терминале — обе команды из «Попробуйте сейчас: байты и буквы»:
printf 'Болт' | wc -c
printf 'Болт' | wc -m1.2. Предсказание:
course answer day19.q1 ЧИСЛОВместо ЧИСЛО — то, что напечатает len для строки из вопроса.
Готово, когда: ✔ у пунктов «Считали байты и буквы строки: wc -c и wc -m» (t_bytes) и «Что выведет: len русской строки» (q1).
2. Индекс и срез строки — страница 2
course answer day19.q2 ОТВЕТВместо ОТВЕТ — то, что появится на экране.
Готово, когда: ✔ у пункта «Что выведет: срез русской строки по байтам» (q2).
3. Руны и починка fix1 — страница 3
3.1. Предсказание — три номера через пробел:
course answer day19.q3 ЧИСЛО ЧИСЛО ЧИСЛО3.2. Описание функции для рун:
go doc utf8.RuneCountInString3.3. Почините ~/gocourse/day19/fix1: колонка ровная по буквам. Одна-две изменённые строки, import не считается. Строки width := и names := не меняйте — проверка запустит программу ещё раз с другой шириной и другими названиями.
Готово, когда: ✔ у пунктов q3, «Смотрели описание функций для рун через go doc» (t_godoc) и «fix1: колонка ровная по буквам…» (fix1).
4. line.go и тест — страница 4
В ~/gocourse/day19/report — line.go с функциями parseLine и fitName по TASK.txt и ваш line_test.go. Случаи теста пишете сами, и среди них обязательно: fitName на русском названии короче ширины и на русском названии длиннее ширины, parseLine на верной строке и на строке, где полей не четыре. Проверка подменит line.go тремя неверными версиями — тест обязан упасть на каждой — и прогонит его на правильной версии другой записи — там он обязан пройти.
cd ~/gocourse/day19/report
cat TASK.txt
go test -v .Готово, когда: в тесте есть русские названия короче и длиннее ширины и строка с неверным числом полей; ✔ у пунктов «Тест в report ловит fitName, которая считает байты вместо букв» (testfit) и «Тест в report ловит parseLine, которая пропускает строку с неверным числом полей» (testparse).
5. Файл по имени и починка fix2 — страница 5
5.1. Предсказание:
course answer day19.q4 ЧИСЛО5.2. Почините ~/gocourse/day19/fix2: перевод строки в конце файла — не битая строка, а пустая строка в середине — битая. До трёх изменённых строк.
cd ~/gocourse/day19/fix2
go run .
echo $?
diff ~/.course/orig/day19/fix2/main.go main.goГотово, когда: ✔ у пунктов q4, «fix2: перевод строки в конце файла — не битая строка…» (fix2) и «Починки точечные: fix1 — до 2 строк, fix2 — до 3» (fixsmall).
6. Отчёт по выгрузке — страница 6
Напишите ~/gocourse/day19/report/main.go по TASK.txt: колонка названий через fitName с вашей шириной, суммы и итог в обычный вывод, битые строки — в поток ошибок с номером, программа идёт дальше, код возврата 1, если битые строки были.
cd ~/gocourse/day19/report
go run .
go build -o prog .
./prog > out.txt; echo $?
cat out.txtПотом ритуал и коммит:
cd ~/gocourse/day19
gofmt -l .
go vet ./...
go test ./...
git add .
git commit -m "report: отчёт по выгрузке"Готово, когда: ✔ у пунктов «report: колонка названий по буквам…» (report), «report: битые строки — в поток ошибок…» (broken), «Код fix1, fix2 и report отформатирован, go vet молчит» (code_fmt) и «Работа дня записана в репозиторий» (git) — не меньше четырёх непустых коммитов.
7. Словарик ошибок — страница 6
Допишите ~/errors.md до тридцати восьми строк вида «текст ошибки — что значило», вместе с прошлыми днями. Между ошибкой и разбором — тире с пробелами вокруг.
Готово, когда: ✔ у пункта «Словарик ~/errors.md: минимум тридцать восемь разборов» (errors).
8. Звёздочка
В зачёт не входит.
- Добавьте в отчёт вторую колонку — артикул — и выровняйте её тоже. Какая ширина нужна артикулу, программа пусть считает сама: самый длинный артикул файла в буквах.
- Перепишите
reportчерезencoding/csv(course extra 19). Что изменится в сообщениях о битых строках и почему программа перестанет идти дальше? - Сделайте
fitName, которая обрезает длинное название не в конце, а в середине:Кронш~иленный. Напишите к ней табличный тест раньше самой функции.
Готово, когда: на вопросы из пунктов есть ответ; course check эти задания не сверяет.
Порог: 13 пунктов из 16. После зачёта — контрольные вопросы: course quiz 19.