• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

C++ vs. Perl - Massenbearbeitung von ASCII-Files

docfred

Member
Hi,

geht um die Bearbeitung (selektiv an bestimmte Positionen in den Files springen und dort bsp. Chars austauschen) von 4 bis 5000 ASCII-Datein.

Was ist da in Bezug auf die Laufzeit eher zu empfehlen? Perl oder C++?
 

regexer

Advanced Hacker
docfred schrieb:
Was ist da in Bezug auf die Laufzeit eher zu empfehlen? Perl oder C++?
Wahrscheinlich kann man das nicht pauschal sagen. Aber was Massendatenverarbeitung angeht ist perl wirklich sehr schnell. Nicht zu vergleichen mit dem eher langsamen awk.

Gegenfragen: Wie groß sind denn deine Dateien insgesamt? Wie groß die ist größte dieser Einzeldateien?
Falls sich die Dateien höchstens im 2stelligen Megabyte-Bereich bewegen, würde ich die einzelnen Files jeweils komplett in den Hauptspeicher laden. Dadurch spart man sich eher laufzeitintensive seeks (=an bestimmte Positionen in den Files springen).

Aber vielleicht gibst du uns noch etwas mehr Infos zu deiner Aufgabe...

Wie auch immer: Ich würde perl nehmen, nicht zuletzt deswegen, weil ich das besser kann als C++ ;-)
 
Wahrscheinlich kann man das nicht pauschal sagen. Aber was Massendatenverarbeitung angeht ist perl wirklich sehr schnell. Nicht zu vergleichen mit dem eher langsamen awk.
Im Perl-Sourcecode: /* Heh, heh. */
Schnell vielleicht im Gegensatz zu awk (deswegen wurde Perl ja auch entworfen, also nutzt es auch statt diese Uralt-Tools), aber C kann es nicht schlagen. Manchmal dauert das echt voll lange bis `pegrep` (ein selbstentwickeltes grep mit Perl-regexes) fertig wird, aber standard `grep` (bzw. egrep) kennen halt keine Perl-Regexes.
Dir ist sicher bewusst, dass der Durchschnittsfaktor der Ausführungsgeschwindigkeit

Perl geteilt durch C ~~ 11.0

:!: .oO( was mich auf die Idee bringt, pegrep mal in C neuzuschreiben)
 

regexer

Advanced Hacker
jengelh schrieb:
(deswegen wurde Perl ja auch entworfen, also nutzt es auch statt diese Uralt-Tools),
Mach ich doch!
Dir ist sicher bewusst, dass der Durchschnittsfaktor der Ausführungsgeschwindigkeit

Perl geteilt durch C ~~ 11.0
Naja, so pauschal würde ich das nicht sagen. Aber wir können das ja gerne anhand dieser Aufgabenstellung testen. Wäre sicher interessant. Dazu bräuchten wir aber mehr Infos...

EDIT:
.oO( was mich auf die Idee bringt, pegrep mal in C neuzuschreiben)
man grep sagt:
Code:
       -F, --fixed-strings
              Interpret PATTERN as a list of fixed strings, sepa­
              rated  by  newlines, any of which is to be matched.
              -P, --perl-regexp Interpret PATTERN as a Perl regu­
              lar expression.
 
OP
docfred

docfred

Member
Danke schonmal für die Antworten :)

Geht um die Stapelverarbeitung mehrerer kleinerer (nur wenige kB) Ascii-Dateien. Zeichen(ketten) an bestimmten Stellen heraussuchen, lesen und/oder ändern.

Hätte Perl jetzt aus dem Bauch heraus leichte Performancevorteile zugestanden aufgrund des Designs und der Eignung speziell für solche Angelegenheiten.

Scheint wohl auf einen Patt hinauszulaufen (das Verhältnis von 1 zu 11 stelle ich jetzt mal in Frage :) ) und es entscheidet nur die persönliche Neigung? ;)
 
OP
docfred

docfred

Member
Sind wie gesagt ein paar tausend am Stück. Einsatzbereich Softwaretestautomatisierung.
 

regexer

Advanced Hacker
notoxp schrieb:
Blöde Frage: Inwieweit spielt da die Performance eine Rolle?
Ich habe nur deswegen die Frage gestellt, weil ein paar Tausend KB-Dateien zu durchsuchen keine Sache von Stunden sein wird.

Beispiel: Brauchst du es für eine Auswertung, und es spielt keine Rolle, ob das Programm 10 Sekunden oder 1 Minute läuft.
Oder willst du dein Programm auf einem Webserver laufen lassen, und bei jedem Seitenaufbau muss es laufen. Dann wären 0,5 Sekunden vielleicht schon zu viel.

Das sind Extrembeispiele, aber vielleicht verstehst du, warum ich diese Frage gestellt habe...
 
Oben