То, что флаг «a» в команде open
означает «открыть файл в режиме добавления», то есть создать файл, если он не существует, иначе не отбрасывать его содержимое и просто размещать указатель потока в конец файла, чтобы при следующем вызове puts
этого дескриптора файла данные добавлялись в файл.
Следовательно, вероятно, ваша проблема в том, что вы не понимаете, что общие команды манипулирования файлами никогда не интерпретируют данные в файле 1 : это просто непрозрачный поток байтов для них; любая интерпретация данных должна быть выполнена в другом месте. Вот где появляются понятия сериализация и десериализация .
Думаю, вам стоит взглянуть на специализированный пакет csv из tcllib .
1 Что ж, файловые потоки могут до некоторой степени интерпретировать содержимое своих файлов, чтобы упростить работу с текстовыми файлами: вы можете указать поведение открытого файла канал с с учетом кодировки символов и переносов строк.