Rust - как полностью заменить строку?
Не могу понять почему не выводится новое значение строки, которое определяется внутри условия. Внутри условия вывод строки с новым значением работает. Мне нужно именно полностью заменить-пересоздать строку с новым значением по условию.
for line in f.lines(){
let line_r = line.expect("Unable to read line");
if re2.is_match(&line_r){
continue;
}
if re3.is_match(&line_r){
// здесь новое значение существует и печатаеся
let line_r = "2024-05-04 17:33:27,936 NEW string";
println!("{:?}", line_r);
}
//здесь нет нового значения уже
println!("{:?}", line_r);
Ответы (2 шт):
Автор решения: tiovi
→ Ссылка
Попробуйте так.
for line in f.lines(){
let mut line_r = line.expect("Unable to read line");
if re2.is_match(&line_r){
continue;
}
if re3.is_match(&line_r){
// здесь новое значение существует и печатаеся
line_r = "2024-05-04 17:33:27,936 NEW string";
println!("{:?}", line_r);
}
//здесь нет нового значения уже
println!("{:?}", line_r);
Дело в том, что вы создавали новую переменную line_r
в блоке if
и поэтому внешняя переменная line_r
, которая была прочитана, останется неизменной.
Мы используем одну переменную line_r
и присваиваем ей новое значение внутри условия
Автор решения: Dima
→ Ссылка
Сам тупил видимо я. Вот так получилось. Нужно было ее сделать мутабельной и использовать String::from.
for line in f.lines(){
let mut line_r = line.expect("Unable to read line");
if re2.is_match(&line_r){
continue;
}
if re3.is_match(&line_r){
line_r = String::from("2024-05-04 17:33:27,936");
}
println!("{:?}", line_r);