In einem Text nur die LF löschen
In einem Text nur die LF löschen
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
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
Re: In einem Text nur die LF löschen
Versuchs mal mit
Code: Alles auswählen
\\n
Re: In einem Text nur die LF löschen
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)
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: In einem Text nur die LF löschen
Hallo EDI,
wow, klappt super, vielen vielen Dank.
VG Philipp
wow, klappt super, vielen vielen Dank.
VG Philipp
Re: In einem Text nur die LF löschen
Hier eine Alternative, von der ich aber noch nicht weiß, ob ich sie ernst meine :
Auf jeden Fall behandelt sie das wechselnde "\n" und "\n " sowie die vorletzte (Hexadezimal-) Zahl richtig.
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=",")
Re: In einem Text nur die LF löschen
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:
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:
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:
und hier nochmal in einem Rutsch:
Gruß, Jörg
Bis hierhin bin ich gekommen:
Code: Alles auswählen
sed -e '1d;/^E/d;/^ *$/d' SeaFet-1005_20170824_090905.txt
(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'
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'
Code: Alles auswählen
sed -e '1d;/^E/d;/^ *$/d;N;N;s/\n *//g' SeaFet-1005_20170824_090905.txt