Zelle mit Zahlen an bestimmter Stelle auffüllen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Zelle mit Zahlen an bestimmter Stelle auffüllen

Re: Zelle mit Zahlen an bestimmter Stelle auffüllen

von Karolus » Fr, 02.11.2012 08:32

Hallo
Wie bereits Lorbass angemerkt hat, ist Calc dafür relativ ungeeignet, weil du deine 20 Millionen Textzeilen erstmal auf 20 Textdateien zu je 1 Million Zeilen aufteilen musst.

Da bietet sichs doch an, das gleich per Awk|sed auf der Kommandozeile zu lösen, oder mit einem kleinem Perl- oder Pythonscript.

In Python sähe das etwa so aus:

Code: Alles auswählen


import re

rex = re.compile(r'^(\D{2})(\d+)')

inpath = 'vorher.csv' # die Eingangsdatei mit 20 mio Zeilen
outpath = 'nachher.csv'

with open(inpath) as infile:
    with open(outpath,'w') as outfile:
        for line in infile:
            outfile.write( rex.sub( lambda match : '%s%04d' %( match.group(1), int( match.group(2) ) ), line ) )
 
Karolus

Re: Zelle mit Zahlen an bestimmter Stelle auffüllen

von lorbass » Do, 01.11.2012 19:35

ErikP hat geschrieben:txt-file mit 10 Mio. Zeilen
Bist du sicher, dass du das mit Calc erledigen willst? Mein LibreOffice-Calc 3.5.4.2 kann jedenfalls nur rund 1 Mio. Zeilen (genau 1 048 576) verarbeiten…

Wenn ich das große Datenvolumen außer Acht lasse, wäre die Aufgabe in zwei Suchen&Ersetzen-Durchläufen mit Regulären Ausdrücken zu erledigen:

Spalte mit Flugnummern markieren, Menüpunkt Bearbeiten > Suchen & Ersetzen… wählen, im Suchen & Ersetzen-Dialog eingeben:
  • Suchen nach: ^([A-Z]{2})([0-9]{1,3})$
  • Ersetzen durch: $1000$2
  • [Mehr Optionen]
  • [] Nur in Selektion (Optional)
  • [] Regulärer Ausdruck
Dein Beispiel sieht dann so aus:
  • – AA0001
    – CO00014
    – LH000335
Im zweiten Durchlauf werden überzählige Nullen entfernt, die im ersten Durchlauf 'reingekommen sind, weil in der ersten Runde mit konstant drei Nullen aufgefüllt wurde. Dazu erneut Spalte mit Flugnummern markieren und im noch geöffneten Suchen & Ersetzen-Dialog eingeben:
  • Suchen nach: ^([A-Z]{2})0*([0-9]{4})$
  • Ersetzen durch: $1$2
  • [Mehr Optionen]
  • [] Nur in Selektion (Optional)
  • [] Regulärer Ausdruck
Damit ist das Ziel erreicht:
  • – AA0001
    – CO0014
    – LH0335
Ich bezweifle allerdings, dass Calc das richtige Verfahren für diese Datenmenge ist. Ich glaube auch nicht, dass man mit dem Writer, der ebenfalls mit den Regulären Ausdrücken umgehen kann, glücklicher wird. Vielleicht wird ein Texteditor, der Reguläre Ausdrücken beherrscht, mit der Aufgabe fertig. Das richtige „Werkzeug“ für derartige Datenmengen dürfte aber eine Datenbank sein.

Da wäre dann drüber nachzudenken, wenn du dich entschieden hast, wie du fortfahren willst.

Gruß
lorbass

Nach oben