Seite 1 von 1

In einem Text nur die LF löschen

Verfasst: Di Nov 19, 2019 8:16 pm
von pfischer
Liebes Forum,
ich habe eine Datei in der innerhalb einer Zeile plötzlich 2 x ein LF (Linefeed) auftaucht, die mir die gesamte Formatieriung durcheinanderbringen. Ich habe eine solche Datei auch angehängt. Am Ende der Zeile (die sich durch die LF's auf zwei Zeilen verteilt) kommt ein CRLF.


SATPHA1005,24-Aug-2017 09:09:09.340,,8.25120,8.21996,5.2384,nan,nan,nan,nan,-0.9
3241035,-0.89574187,1.30558580,14.697,25,2.4,4.882,10.493,6.093,6.117,183,554,0.
00000000,0x0000,222


SATPHA1005,24-Aug-2017 09:09:19.336,,8.25095,8.21979,5.2381,nan,nan,nan,nan,-0.9
3242406,-0.89575171,1.30559384,14.689,25,2.4,4.890,10.501,6.093,6.117,0,219,0.00
000000,0x0000,71


Ich möchte nun die überflüssigen LF beim einlesen der Files löschen aber die CRLF behalten, so das eine Zeile bis zum CRLF in einer Zeile steht und dann eingelsen wird.

Ich habe verschiedene Optione ausprobiert wie z.B. gsub("\n", "") oder ähnliches, erhalte aber immer nur eine Text in dem sowohl die CR und die LF gegen "" ersetzt wurden, so das sein langer String oder Zeilenumbrüche am Ende einer Zeile entsteht.

SATPHA1005,24-Aug-201709:09:09.340,,8.25120,8.21996,5.2384,nan,nan,nan,nan,0.93241035,0.89574187,1.30558580,14.697,25,2.4,4.882,10.493,6.093,6.117,183,554,0.00000000,0x0000,222SATPHA1005,24-Aug-2017 09:09:19.336,,8.25095,8.21979,5.2381,nan,nan,nan,nan,-0.93242406,-0.89575171,1.30559384,14.689,25,2.4,4.890,10.501,6.093,6.117,0,219,0.00000000,0x0000,71

Für eine Tip was ich falsch mache wäre ich sehr dankbar.

Viele Grüße
Philipp

SeaFet-1005_20170824_090905.txt
(147.31 KiB) 58-mal heruntergeladen

Re: In einem Text nur die LF löschen

Verfasst: Di Nov 19, 2019 8:37 pm
von Athomas
Versuchs mal mit :?:

Re: In einem Text nur die LF löschen

Verfasst: Di Nov 19, 2019 10:45 pm
von EDi
So hier?

Code: Alles auswählen

file <- readLines('http://forum.r-statistik.de/download/file.php?id=774')
# drop header
file <- file[10:length(file)]
# drop empty lines
file <- file[! (file == "" | file == " ")]
# paste chunks of three
file <- sapply(split(file, ceiling(seq_along(file)/3)), paste, collapse = ',')
# read as data.frame
df <- read.table(textConnection(file), header = FALSE, sep = ',')
head(df)

Re: In einem Text nur die LF löschen

Verfasst: Mi Nov 20, 2019 8:54 am
von pfischer
Hallo EDI,
wow, klappt super, vielen vielen Dank.
VG Philipp

Re: In einem Text nur die LF löschen

Verfasst: Mi Nov 20, 2019 4:04 pm
von Athomas
Hier eine Alternative, von der ich aber noch nicht weiß, ob ich sie ernst meine :) :

Code: Alles auswählen

Bla            <- readChar("http://forum.r-statistik.de/download/file.php?id=774", nchars=1E6)
brauchbar      <- substr(Bla, regexpr("SATPHA", Bla)[[1]], nchar(Bla)) 
brauchbar.ohne <- gsub("\n {0,1}", "", brauchbar)
Ergebnis       <- read.table(text=brauchbar.ohne, sep=",")
Auf jeden Fall behandelt sie das wechselnde "\n" und "\n " sowie die vorletzte (Hexadezimal-) Zahl richtig.

Re: In einem Text nur die LF löschen

Verfasst: Fr Nov 22, 2019 9:46 am
von jogo
ich bastel gerade an einer Lösung mit dem guten alten stream-Editor. https://de.wikipedia.org/wiki/Sed_(Unix)
Bis hierhin bin ich gekommen:

Code: Alles auswählen

sed -e '1d;/^E/d;/^ *$/d' SeaFet-1005_20170824_090905.txt
Jetzt muss man nur noch jeweils drei Zeilen zusammenkleben.
(so ähnlich wie in diesem Beispiel: https://www.gnu.org/software/sed/manual ... ning-lines )
also so:

Code: Alles auswählen

sed -e '1d;/^E/d;/^ *$/d' SeaFet-1005_20170824_090905.txt | sed -e 'N;N;s/\n//g'
Nachtrag:
ich sehe gerade, dass dort noch das hässliche Leerzeichen verblieben ist vom Zeilenanfang.
(ist besonders störend, wenn eine Zahl vom Umbruch betroffen war)

jetzt ist alles hübsch:

Code: Alles auswählen

sed -e '1d;/^E/d;/^ *$/d;s/^ //' SeaFet-1005_20170824_090905.txt | sed -e 'N;N;s/\n//g'
und hier nochmal in einem Rutsch:

Code: Alles auswählen

sed -e '1d;/^E/d;/^ *$/d;N;N;s/\n *//g' SeaFet-1005_20170824_090905.txt
Gruß, Jörg