In einem Text nur die LF löschen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
pfischer
Beiträge: 17
Registriert: Mi Mär 29, 2017 5:31 pm

In einem Text nur die LF löschen

Beitrag 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) 41-mal heruntergeladen

Athomas
Beiträge: 393
Registriert: Mo Feb 26, 2018 8:19 pm

Re: In einem Text nur die LF löschen

Beitrag von Athomas »

Versuchs mal mit :?:

Benutzeravatar
EDi
Beiträge: 1096
Registriert: Sa Okt 08, 2016 3:39 pm

Re: In einem Text nur die LF löschen

Beitrag 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)
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
Bild.

pfischer
Beiträge: 17
Registriert: Mi Mär 29, 2017 5:31 pm

Re: In einem Text nur die LF löschen

Beitrag von pfischer »

Hallo EDI,
wow, klappt super, vielen vielen Dank.
VG Philipp

Athomas
Beiträge: 393
Registriert: Mo Feb 26, 2018 8:19 pm

Re: In einem Text nur die LF löschen

Beitrag 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.

jogo
Beiträge: 1821
Registriert: Fr Okt 07, 2016 8:25 am

Re: In einem Text nur die LF löschen

Beitrag 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

Antworten