mirror of
https://github.com/uutils/coreutils.git
synced 2025-12-23 08:47:37 +00:00
nl: improve the performances
This commit is contained in:
parent
94b6544561
commit
8ec28bbd32
3 changed files with 14 additions and 5 deletions
|
|
@ -31,6 +31,7 @@ nl-help-number-width = use NUMBER columns for line numbers
|
|||
# Error messages
|
||||
nl-error-invalid-arguments = Invalid arguments supplied.
|
||||
nl-error-could-not-read-line = could not read line
|
||||
nl-error-could-not-write = could not write output
|
||||
nl-error-line-number-overflow = line number overflow
|
||||
nl-error-invalid-line-width = Invalid line number field width: ‘{ $value }’: Numerical result out of range
|
||||
nl-error-invalid-regex = invalid regular expression
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ nl-help-number-width = utiliser NUMBER colonnes pour les numéros de ligne
|
|||
# Messages d'erreur
|
||||
nl-error-invalid-arguments = Arguments fournis invalides.
|
||||
nl-error-could-not-read-line = impossible de lire la ligne
|
||||
nl-error-could-not-write = impossible d'écrire la sortie
|
||||
nl-error-line-number-overflow = débordement du numéro de ligne
|
||||
nl-error-invalid-line-width = Largeur de champ de numéro de ligne invalide : ‘{ $value }’ : Résultat numérique hors limites
|
||||
nl-error-invalid-regex = expression régulière invalide
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
use clap::{Arg, ArgAction, Command};
|
||||
use std::ffi::{OsStr, OsString};
|
||||
use std::fs::File;
|
||||
use std::io::{BufRead, BufReader, Read, stdin};
|
||||
use std::io::{BufRead, BufReader, BufWriter, Read, Write, stdin, stdout};
|
||||
use std::path::Path;
|
||||
use uucore::error::{FromIo, UResult, USimpleError, set_exit_code};
|
||||
use uucore::{format_usage, show_error, translate};
|
||||
|
|
@ -346,6 +346,7 @@ pub fn uu_app() -> Command {
|
|||
|
||||
/// `nl` implements the main functionality for an individual buffer.
|
||||
fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings) -> UResult<()> {
|
||||
let mut writer = BufWriter::new(stdout());
|
||||
let mut current_numbering_style = &settings.body_numbering;
|
||||
let mut line = Vec::new();
|
||||
|
||||
|
|
@ -382,7 +383,7 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings
|
|||
if settings.renumber {
|
||||
stats.line_number = Some(settings.starting_line_number);
|
||||
}
|
||||
println!();
|
||||
writeln!(writer).map_err_context(|| translate!("nl-error-could-not-write"))?;
|
||||
} else {
|
||||
let is_line_numbered = match current_numbering_style {
|
||||
// consider $join_blank_lines consecutive empty lines to be one logical line
|
||||
|
|
@ -407,14 +408,16 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings
|
|||
translate!("nl-error-line-number-overflow"),
|
||||
));
|
||||
};
|
||||
println!(
|
||||
writeln!(
|
||||
writer,
|
||||
"{}{}{}",
|
||||
settings
|
||||
.number_format
|
||||
.format(line_number, settings.number_width),
|
||||
settings.number_separator.to_string_lossy(),
|
||||
String::from_utf8_lossy(&line),
|
||||
);
|
||||
)
|
||||
.map_err_context(|| translate!("nl-error-could-not-write"))?;
|
||||
// update line number for the potential next line
|
||||
match line_number.checked_add(settings.line_increment) {
|
||||
Some(new_line_number) => stats.line_number = Some(new_line_number),
|
||||
|
|
@ -422,10 +425,14 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings
|
|||
}
|
||||
} else {
|
||||
let spaces = " ".repeat(settings.number_width + 1);
|
||||
println!("{spaces}{}", String::from_utf8_lossy(&line));
|
||||
writeln!(writer, "{spaces}{}", String::from_utf8_lossy(&line))
|
||||
.map_err_context(|| translate!("nl-error-could-not-write"))?;
|
||||
}
|
||||
}
|
||||
}
|
||||
writer
|
||||
.flush()
|
||||
.map_err_context(|| translate!("nl-error-could-not-write"))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue