Ho un file nel formato csv con una prima colonna di dati che rappresenta il codice articolo opzionalmente terminato con "UNIUNI"
o caso misto di questi caratteri, caricato mediante un lettore di codici a barre. Devo tagliare via l'ultimo "UNI"
s.Taglio efficiente di una stringa
A Rust ho provato a scrivere con successo parziale di una funzione essenzialmente come questo:
fn main() {
// Ok: from "9846UNIUNI" to "9846"
println!("{}", read_csv_rilev("9846UNIUNI".to_string()));
// Wrong: from "9846uniuni" to "9846"
println!("{}", read_csv_rilev("9846uniuni".to_string()));
}
fn read_csv_rilev(code: String) -> String {
code
//.to_uppercase() /*Unstable feature in Rust 1.1*/
.trim_right_matches("UNI")
.to_string()
}
La firma della funzione ideale assomiglia:
fn read_csv_rilev(mut s: &String) {/**/}
ma probabilmente un'azione sul posto on a String non è una buona idea In effetti, nella libreria standard di Rust non c'è nulla da fare, escluso String::pop()
.
C'è un modo per applicare il taglio su una stringa senza allocarne un altro?
'.trim_right_matches()' sta per essere stabile a Rust 1.2 – bluss
E '.trim_right()', che puoi usare per farlo senza '.to_string()'. Basta usare la lunghezza dello str tagliato per troncare. – bluss