и не переделывать. Хочу спарсить его растом. Начитавшись доки, решил сделать через трейт и impl. CSV будет читаться обычным методом read и мапиться в Some(f) через сплит "\r\n", заголовка вверху цсв никогда нет, поэтму через struct и serde сходу не знаю как сделать, если только в tuple пихать, но тогда доступ к полям будет трудным.
Суть в том, что места где по идее может быть null, там стоит тире, но может быть и null. Поэтому лучше обработать все варианты, и получить валидные строки\числа
В общем я придумал как то так
trait ParseData {
fn string_to_i32(&self) -> i32;
fn string_to_valid_string(&self) -> String;
}
impl ParseData for Option<String>{
fn string_to_i32(&self) -> i32 {
match self {
Some(str) => {
match str.parse() {
Ok(n) => { n }
_ => {
-1
}
}
}
None => { -1 }
}
}
fn string_to_valid_string(&self) -> String {
match self {
Some(str) => {
if str == "-" {
"-1".to_string()
}
else {
str.to_string()
}
}
None => { "-1".to_string() }
}
}
}
Насколько это адекватно ?)
ты хочешь свой csv reader написать?) А чем готовые не устраивают?
я описал все проблемы которые у меня есть, и почему решил сделать так) если есть похожие реализации готовые, буду рад почитать, пока что сделал так и все работает как ожидается)
к примеру, None serde обработает, а как с "-" ? а ну или можно заменить через .replace на None, но это тоже наркомания наверное
я не увидел в твоём описание какие проблемы есть у стандартных пакетов чтения csv для твоего случая. Если ты про использование структур с csv без заголовка, то оно без проблем работает, просто по порядку объявления полей.
а как быть с тире в строковом поле и числовом, чтобы на мое значение поменять ? в целом я понял, что да, возможно про csv я не дочитал) про отсутствие заголовка не увидел сначала
Обсуждают сегодня