Я читаю в файле CSV из коммерческого программного обеспечения для обработки измерений, написав свой собственный метод импорта CSV (в c # btw). Содержимое немного странно в том, что в местах, где должны быть числовые значения, возникает много прерывистых пустых ячеек. Вот так:

Zeit [s]; Скорость [м / с]; Расстояние [м]; Х [м / с²]; Y [м / с²]; Z [м / с²]; Zext [м / с²];

0,100000; 0,000000; 0,000000; 0,004023; 0,009220; -0,007959; 0,035353;

0,100167; ; ; ; ; ; -0,021732;

0,100333; ; ; ; ; ; -0,003706;

0,100500; ; ; ; ; ; 0,041362;

0,100667; ; ; ; ; ; 0,035353;

0,100833; ; ; ; ; ; 0,044366;

0,101000; 0,000000; 0,000000; -0,003253; 0,000765; 0,003821; 0,008312;

0,101167; ; ; ; ; ; -0,006710;

0,101333; ; ; ; ; ; -0,027741;

и так далее...

Существует ли какое-либо соглашение для CSV, которое предписывает, как обращаться с пропущенными значениями, когда соответствующий столбец числовой?

Для меня довольно очевидно из конкретного экспериментального контекста, что пропущенные значения должны быть постоянными (т. Е. Оставаться на последнем действительном значении в этом столбце), но когда я пишу общий фильтр импорта для CSV, я хотел бы смело предположить, что это всегда в случае с CSV из разных источников.

А как насчет временного столбца / абсцисс: если они когда-либо пропускали некоторые значения, нет смысла сохранять их постоянными (и, поскольку я не знаю точно, что абсциссы всегда находятся в первом столбце, я не знаю, что держать постоянным на всех!) ...

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

PS: извините, если тег c # неправильный, это просто язык, на котором я пишу код, но он не имеет прямого отношения к вопросу. Может быть удалено, если не желательно.

0
oliver 20 Авг 2018 в 11:31

3 ответа

Лучший ответ

написав свой собственный метод импорта CSV

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

из конкретного экспериментального контекста довольно очевидно, что пропущенные значения должны быть постоянными

Это не имеет ничего общего с CSV. Это логика ваших программ. Ваш формат данных определяет, что ваши значения отсутствуют. Это то, что обычный читатель CSV сделает для вас. Ваша бизнес-логика может заключаться в том, что пропущенные значения будут заменены их последними известными значениями.

Так что вам нужно поместить это в две разные части вашей программы. Импорт данных (чтение csv) и бизнес-логика.

1
nvoigt 20 Авг 2018 в 08:41

Обычно у вас есть ускорение Zext (при условии, что это другое значение датчика), которое вытягивается чаще, чем другие значения. Одна шестая милисекунды, а остальные обновляются каждую миллисекунду.

Поэтому, чтобы сэкономить место, другие значения игнорируются, а не записываются, чтобы не допустить ненужного увеличения файла CSV. Что вы должны определить для себя, какие данные для вас важны? Если вы собираетесь записать значения в реляционную базу данных, он займет пространство, определенное для типа данных, если вы напишите в экстраполированном значении (скажем, взяв значение из предыдущей «полной строки») или ноль ,

Таким образом, если значения Zext не нужны для вашей вещи, игнорируйте целые строки, в противном случае вы можете экстраполировать / копировать значения из предыдущих полных строк.

0
DaMachk 20 Авг 2018 в 08:41

Как я вижу, у вас есть разделители ";", вы можете разделить на основе разделителя. Таким образом, вы можете прочитать содержимое ячеек (пусто или нет).

0
Olusola Omosola 20 Авг 2018 в 08:44
51926847