Как вставить данные в предварительно выделенный файл CSV? - PullRequest
2 голосов
/ 15 июля 2010

Текстовый файл (или CSV):

Data:,,,,,\n  

(но с 100 "," с)

В C или C ++ я хотел бы открыть файл и затем ввести значения между ",".
то есть - Data:,1,2,3,4,\n

Я предполагаю, что мне нужен какой-то поиск для поиска следующей запятой, вставки данных, поиска следующей вставки запятой и т. Д.

Я искал в memchr () буфер и задавался вопросом, есть ли что-то подобное для текстового файла?

Если бы вы могли указать мне правильное направление, я был бы признателен.

(Я тоже не против прочитать книгу, чтобы найти что-то подобное, я просто не знаю, в какой книге будет эта информация?)

Спасибо.

Ответы [ 4 ]

3 голосов
/ 15 июля 2010

На самом деле вы не можете сделать это в C ... если вы откроете в режиме чтения / записи, вы перезапишите символы, а не вставите их.

http://c -faq.com / STDIO / fupdate.html

Вам нужно открыть файл, прочитать строку в память, записать новую строку во временный файл.

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

2 голосов
/ 15 июля 2010

(Это для случая C ++) Просто проанализируйте данные в Связанный список с Объектами, которые содержат данные, измените данные и перезаписайте файл.

Сначала вам нужно разбить данные на строки(\ n создает новый элемент связанного списка):

Data:,,,,,\n
Data2:,,,,,\n

получит строки (псевдолист):

["Data: ,,,,,", "Data2 :,,,,, "]

Так что теперь вам нужно определить свой объект для каждой строки, например:

class LineStruct {
   public:
    string head;
    LinkedList<string> data;
};

и заполнить его.

Затем вы редактируете данные-структура и после этого вы записываете его обратно на диск.

1 голос
/ 15 июля 2010

Здесь я бы посмотрел:

Как и предлагалосьпо wmils answer вам придется либо использовать временный файл, либо хранить все новые строки в памяти до тех пор, пока все строки не будут обработаны, а затем перезаписать исходный файл.

1 голос
/ 15 июля 2010

Если у вас есть

Data:,,,,,\n

, то между пробелом нет места, вы должны написать совершенно новые строки.

Однако, если у вас было

Data:   ,   ,   ,   ,   ,   \n

тогда вы можете перезаписать только те части, которые представлены * C 1009 *

в C, вы будете искать в части файла и писать, а затем искать следующую позицию, извините, нет кода сверхумоя голова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...