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: 10
Registriert: Mi Mär 29, 2017 5:31 pm

In einem Text nur die LF löschen

Beitrag von pfischer » Di Nov 19, 2019 8:16 pm

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) 37-mal heruntergeladen

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

Re: In einem Text nur die LF löschen

Beitrag von Athomas » Di Nov 19, 2019 8:37 pm

Versuchs mal mit :?:

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

Re: In einem Text nur die LF löschen

Beitrag von EDi » Di Nov 19, 2019 10:45 pm

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: 10
Registriert: Mi Mär 29, 2017 5:31 pm

Re: In einem Text nur die LF löschen

Beitrag von pfischer » Mi Nov 20, 2019 8:54 am

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

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

Re: In einem Text nur die LF löschen

Beitrag von Athomas » Mi Nov 20, 2019 4:04 pm

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: 1524
Registriert: Fr Okt 07, 2016 8:25 am

Re: In einem Text nur die LF löschen

Beitrag von jogo » Fr Nov 22, 2019 9:46 am

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