Seite 1 von 1

Zeilen löschen

Verfasst: Mo 13. Mai 2013, 09:22
von Purpur
Hallo zusammen,

LibreOffive Version 3.6.6.2 (Build ID: f969faf)

Ich habe eine Datei aus einem csv-Import von einigen tausend Zeilen länge. Es handelt sich um eine Trackpointliste aus einer gpx-Datei.

Hier einige Beispielzeilen aus den Mitte der Datei:

Bild

Die rot markierten Zeilen geben Höhen- und Zeitwerte an. Diese Zeilen sind für mich uninteressant und sollen aus der Liste gelöscht werden. Am Ende soll ein Trackpoint so aussehen:

<trkpt lat="59.957149510000001" lon="10.964907650000001">
</trkpt>

Der Tag </trkpt> könnte noch an das vorhergehende Zeilenende verschoben werden, so dass pro Zeile ein Trackpoint erscheint (ist aber nicht zwingend):

<trkpt lat="59.957149510000001" lon="10.964907650000001"></trkpt>

Leider kommt erschwehrend hinzu, dass vor den Tags <trkpt ...> und </trkpt> 2 Leerzeichen stehen, vor den zu löschenden Tags <ele> und <time> sogar 4. Für die Funktionalität der Trackpointliste spielt das keine Rolle, vielleicht aber für das Suchen in der Liste.

Kennt jemand von euch eine Möglichkeit, die rot markierten Zeilen aus der Datei zu löschen?
Leider beherrsche ich die Skriptsprache von LO nicht, sonst könnte ich mir whrscheinlich selbst weiter helfen.

Danke für eure Zeit und euer Mitdenken,
Purpur

Re: Zeilen löschen

Verfasst: Mo 13. Mai 2013, 09:43
von bst
Morgen,

hier in LO 4.0.2.2 funktioniert folgender VBA-Code, der löscht alles außer den Zeilen die nach optionalen Leerzeichen mit "<trkpt" beginnen.

cu, Bernd
--

Code: Alles auswählen

Option VBASupport 1

Sub Main
	dim i as long, s as string
	
	for i = cells(rows.count,1).end(xlup).row to 1 Step -1
		s = trim(cells(i,1).value
		if not (s like "<trkpt*") then rows(i).delete
	next
End Sub

Re: Zeilen löschen

Verfasst: Mo 13. Mai 2013, 10:03
von karolus
Hallo

→Daten→Filter→Standardfilter

.... .*</?trkpt.*

mit:
[x]regulärer Ausdruck
und
[x]Ausgabe nach ...<wohin du willst>




Karolus

Re: Zeilen löschen

Verfasst: Mo 13. Mai 2013, 11:17
von Purpur
Hallo zusammen,

@ karolus
Danke - deine Lösung per RegEx hat mein Problem gelöst.

@ bernd
Dein Skript hat bei mir einen Laufzeitfehler in Zeile 4 gebracht. Vielleicht liegt das an den verschiedenen LO-Versionen (obwohl ich meine (WinXP) erst vor 1 Stunde auf die aktuelle Version gebracht habe).
Dennoch danke für deinen Einsatz.

Mit besten Grüßen,
Purpur

Re: Zeilen löschen

Verfasst: Mo 13. Mai 2013, 11:53
von bst
Nochmals Hi,

und FWIW, keine Ahnung warum. Falls Dich eine Script-Lösung überhaupt noch interessieren sollte könntest Du es mal so probieren.

cu, Bernd
--

Code: Alles auswählen

Option Explicit

Sub Main
   Dim oSheet as Object, oCellCursor as Object, oCellRange as Object
   Dim i as Long, iLastRow as Long, s as String

   oSheet = ThisComponent.CurrentController.getActiveSheet()
   oCellCursor = oSheet.createCursor()
   oCellCursor.GotoEndOfUsedArea(True)
   iLastRow = oCellCursor.getRangeAddress.EndRow

   for i = iLastRow to 0 Step -1
      s = ltrim(oSheet.getCellByPosition(0, i).string)
      if Not (s Like "<trkpt*") then oSheet.getRows.removeByIndex(i,1)
   next
End Sub