Zelle mit Zahlen an bestimmter Stelle auffüllen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Zelle mit Zahlen an bestimmter Stelle auffüllen

Beitrag von lorbass »

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
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Zelle mit Zahlen an bestimmter Stelle auffüllen

Beitrag von Karolus »

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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten