Задан CSV-файл с заголовком, в котором перечислены названия столбцов.
Строки нумеруются целыми положительными числами, необязательно в порядке
возрастания. В ячейках CSV-файла могут хранится или целые числа или выражения вида = ARG1 OP ARG2
,
где ARG1
и ARG2
- целые числа или адреса ячеек в формате Имя_колонки Номер_строки
,
а OP
- арифметическая операция из списка +, -, *, /
.
A | B | Cell | |
---|---|---|---|
1 | 1 | 0 | -1 |
2 | 2 | =A1+Cell30 | |
30 | 0 | =B1+A1 | 5 |
,A,B,Cell
1,1,0,-1
2,2,=A1+Cell30,
30,0,=B1+A1,5
Требуется написать программу, которая читает произвольную CSV-форму из файла (количество строк и столбцов может быть любым), вычисляет значение ячеек, если это необходимо, и выводит получившуюся табличку в виде CSV-представления в консоль.
build.sh
cd build
Nokia_TestCSV.exe ../resource/nokia_test.csv
cd test
build.sh
cd build
Nokia_TestCSV_Test.exe
./build.sh
cd build/
./Nokia_TestCSV ../resource/nokia_test.csv
cd test/
./build.sh
cd build/
./Nokia_TestCSV_Test
Тестовые примеры вместе с файлами находятся в test/src/test_cases
и test/resource/*
соответственно.
Ниже представлены следующие тестовые сценарии для проверки работы программы:
- пустота ячеек
- пустота первой ячейки
- одинаковые название заголовков столбцов/строк
- положительное число в заголовках строк
- деление на 0
- соответствие содержимого ячейки шаблону =ARG1 OP ARG2 или число
- использование целых чисел
- ссылки только на существующие ячейки
- рекурсивное вычисление значений ячеек и проверка на бесконечную рекурсию (когда в вычислениях используется ячейка, которая ещё не была вычислена, и она начинает вычисляться заново по кругу)
- правильное вычисление ячеек
- правильный вывод таблицы