Ho uno script che aggiunge nuovi campi a un file CSV esistente, tuttavia i caratteri ^M
vengono visualizzati alla fine delle vecchie righe in modo che i nuovi campi finiscano in una nuova riga anziché nella stessa. Come rimuovere i caratteri ^M
da un file CSV utilizzando Perl?In Perl, come rimuovere^M da un file?
risposta
Hai scoperto che puoi o fare questo:
$line=~ tr/\015//d;
Questo ha funzionato perfettamente per me! – onaclov2000
non è leggibile come '\ r' - chiunque lo guardi (o te stesso tra un anno) sarebbe contento di un commento affermando che cosa fa – plusplus
^M è il ritorno a capo. Si può fare questo:
$str =~ s/\r//g
Per convertire in stile DOS a Unix fine riga stile:
for ($line in <FILEHANDLE>) {
$line =~ s/\r\n$/\n/;
}
Oppure, per rimuovere UNIX e/o DOS fine riga stile:
for ($line in <FILEHANDLE>) {
$line =~ s/\r?\n$//;
}
non rimuoverebbe anche le newline? –
Suppongo che dipenda dal tuo obiettivo. Ho modificato per mostrare entrambe le strategie. – spoulson
Or 1-liner:
perl -p -i -e 's/\r\n$/\n/g' file1.txt file2.txt ... filen.txt
In vi hit :
.
Quindi s/Control-VControl-M//g
.
Control-V
Control-M
sono ovviamente quelle chiavi. Non spiegarlo
È una cattiva idea includere caratteri non stampabili come il ritorno a capo del codice sorgente nel codice sorgente come questo.Molto meglio usare la \ r escape che è (a) facile da vedere e (b) non andrà persa se la sorgente viene riformattata. –
Un po 'estranei, ma per rimuovere^M dalla riga di comando utilizzando Perl, fare questo:
perl -p -i -e "s/\r\n/\n/g" file.name
Questo uno di linea sostituisce tutte le^caratteri M:
dos2unix <file-name>
è possibile chiamare questo dall'interno di Perl o direttamente dal tuo prompt Unix.
Preferisco una soluzione più generale che funzioni con input DOS o Unix. Supponendo che l'ingresso è da STDIN:
while (defined(my $ln = <>))
{
chomp($ln);
chop($ln) if ($ln =~ m/\r$/);
# filter and write
}
Questo è ciò che ha risolto il mio problema.^M è un ritorno a capo e può essere facilmente evitato in uno script Perl.
while(<INPUTFILE>)
{
chomp;
chop($_) if ($_ =~ m/\r$/);
}
Rimuove^M da un file CSV? Cambiando il file di input? Crea qualche file di output che non li avrà? –
Piccola sceneggiatura che ho per quello. Una modifica ha contribuito a filtrare alcuni altri caratteri non stampabili nei file legacy multipiattaforma.
#!/usr/bin/perl
# run this as
# convert_dos2unix.pl <input_file> output_file
undef $/;
$_ = <>;
s/\r//ge;
print;
- 1. Come salvare un file come UTF-8 da Perl?
- 2. scrivere in un file in Perl
- 3. Come avviare un programma da perl?
- 4. Come definire le costanti in un file separato in Perl?
- 5. Come posso monitorare un file in modo asincrono in Perl?
- 6. Come posso creare un file binario in Perl?
- 7. Cosa fa questa riga perl da un file "sbiancato"?
- 8. Perl: accesso alle variabili "my" da un altro file
- 9. Esegui file SQL in Perl
- 10. In Perl, qual è la differenza tra un file .pm (Perl module) e .pl (Perl script)?
- 11. Come posso impostare i permessi dei file da Perl?
- 12. Come trovo la directory madre di un file in Perl?
- 13. Come posso creare un qr // in Perl 5.12 da C?
- 14. Come includere file in Perl 6
- 15. Come posso estrarre i campi da un file CSV in Perl?
- 16. Come posso accedere al file commesso da un hook di pre-commit Subversion in Perl?
- 17. Come posso estrarre/analizzare i dati tabulari da un file di testo in Perl?
- 18. Chiama perl da php?
- 19. Come si esegue un liner Perl one da un makefile?
- 20. Perl un liner da trovare e sostituire in un file con una variabile
- 21. Perl e XML: Smart: come rimuovere un nodo da un file XML
- 22. Come posso estrarre un nome file da un percorso usando Perl?
- 23. file di Fancy slurping in Perl
- 24. Come posso convertire un array in un hash in Perl?
- 25. Come posso controllare l'estensione di un file usando Perl?
- 26. Chiamare un modulo Perl da Python
- 27. Chiamare un modulo Python da Perl
- 28. Perl: passa attraverso un file e sostituisce
- 29. Come si ottiene la dirname di un file con Perl?
- 30. Come posso dire a una funzione Perl che prende un file da leggere dall'hand speciale ARGV?
Usa 'binmode (STDIN, ": crlf")' o 'PERLIO =: unix: crlf' (vedi [http://stackoverflow.com/a/21320709/424632]). – musiphil