Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Strings durch Zahlen effizient ersetzen??? (https://www.delphipraxis.net/127950-strings-durch-zahlen-effizient-ersetzen.html)

Pam 21. Jan 2009 21:13


Strings durch Zahlen effizient ersetzen???
 
Guten Abend!!!

Ich habe ein einer Textdatei eine Liste mit über 1500 Motorenherstellern. Jeder Hersteller hat eine eine eindeutige Nummer (Zahlen, 1-3 -stellig).
In der zweiten Datei habe ich mehrere zehntausend Zeilen mit verschiedenen Motorenmodellen und Konfigurationen. Am Anfang jeder Zeile steht die Bezeichnung des Hestellers. Meine Aufgabe ist, alle Zeilen so zu modifizieren, dass die Herstellerbezeichnung durch die entsprechende Nummer ersetzt und mit Komma von dem Rest getrennt wird. Dabei soll es so schnell wie möglich passieren?

Was ist die schnellste Methode?

3_of_8 21. Jan 2009 21:14

Re: Strings durch Zahlen effizient ersetzen???
 
Ist die Herstellerbezeichnung auf irgendeine Art und Weise vom Rest der Zeile abgetrennt? Wenn ja, geh einfach alle Zeilen durch, such dir jeweils den Herstellernamen und ersetze ihn durch die Zahl (geht ja Problemlos mit copy und pos), die du z.B. mithilfe einer Hashmap zuordnen kannst.

olee 21. Jan 2009 23:57

Re: Strings durch Zahlen effizient ersetzen???
 
Du müsstest vllt. mal ein paar Beispielzeilen geben.

Die sind eine etwas festere (Nahrungs-)Quelle als sone öde erklärung :-D

omata 22. Jan 2009 00:14

Re: Strings durch Zahlen effizient ersetzen???
 
Dafür ist Delphi gar nicht nötig.
Nimm doch eine Standardanwendung wie Excel oder Calc (OpenOffice).
TEIL, SVERWEIS sind dort dann deine Freunde.

jaenicke 22. Jan 2009 04:37

Re: Strings durch Zahlen effizient ersetzen???
 
Zitat:

Zitat von omata
Dafür ist Delphi gar nicht nötig.
Nimm doch eine Standardanwendung wie Excel oder Calc (OpenOffice).
TEIL, SVERWEIS sind dort dann deine Freunde.

Ich bezweifele doch sehr, dass ein allgemeines Programm für einen solchen speziellen Zweck auch nur annähernd eine ähnliche Geschwindigkeit bieten kann.

Zitat:

Zitat von Pam
Ich habe ein einer Textdatei eine Liste mit über 1500 Motorenherstellern. Jeder Hersteller hat eine eine eindeutige Nummer (Zahlen, 1-3 -stellig).

Das ist doch mal ein Kunststück. 1500 Motorenhersteller und eine eindeutige Nummer in maximal dreistelligen Zahlen? :shock: :gruebel:

Aber das ist ja für die Lösung letztlich egal.

Bernhard Geyer 22. Jan 2009 06:07

Re: Strings durch Zahlen effizient ersetzen???
 
Zitat:

Zitat von Pam
Dabei soll es so schnell wie möglich passieren?

Definiere Schnell? Die Datenmenge sollte auch bei inperformanter Implementierung in Sekunden zu erledigen sein!
Oder soll die Aufgabe schnell gelöst sein?

alzaimar 22. Jan 2009 06:31

Re: Strings durch Zahlen effizient ersetzen???
 
Zitat:

Zitat von jaenicke
Das ist doch mal ein Kunststück. 1500 Motorenhersteller und eine eindeutige Nummer in maximal dreistelligen Zahlen? :shock:

Ich würde das für das eigentliche Problem halten.

Dessenungeachtet sollte diese Anforderung mit einer Hashmap, bzw. selbst mit einer TStringList (Sorted := True) in relativ kurzer Zeit erstens zu implementieren und zweitens abgewickelt sein.
Delphi-Quellcode:
Procedure ErsetzeMotorenHerstellerDurchIDWerte (aHerstellerliste, slMotorenListe : TStringList);
Var
  slHerstellerLookup : TStringlist;
  sHersteller : String;
  i, j, ID : Integer;
 
Begin
  slHerstellerLookup := TStringlist.Create;
  Try
    For i:=0 to aHerstellerListe.Count - 1 do
       slHerstellerLookup.AddObject (HerstellerName (aHerstellerListe[i]), Pointer (HerstellerID(aHerstellerListe[i])));
    slHerstellerLookup.Sorted := True;

    For i:=0 to slMotorenListe.Count - 1 do Begin
      sHersteller := HerstellerName (slMotorenListe[i]);
      j := slHerstellerLookup.IndexOf (sHersteller);
      if j=-1 then
        ID := 99999
      else
        ID := Integer (slHerstellerLookup.Objects[j]);
      slMotorenListe[i] := IntToStr(ID)+','+EntferneHersteller(slMotorenListe[i]);
    End;
  Finally
    slHerstellerLookup.Free;
  End;
End;
Die Funktionen 'HerstellerName', 'HerstellerID' und 'EntferneHersteller' sind von Dir zu implementieren. Wenn die Performance nicht reicht, ersetze den Datentyp des 'slHerstellerLookup' durch eine Hashmap. Eine Implementierung findest Du hier im Forum.

Bernhard Geyer 22. Jan 2009 07:14

Re: Strings durch Zahlen effizient ersetzen???
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von jaenicke
Das ist doch mal ein Kunststück. 1500 Motorenhersteller und eine eindeutige Nummer in maximal dreistelligen Zahlen? :shock:

Ich würde das für das eigentliche Problem halten.

[OT] Gabs da nicht mal eine Nachricht das jemand einen Komprimierungsalgorithmus entwickelt haben sollte der jede Datenmenge komprimieren kann egal welche größe oder ob diese mit anderen Algorithmen schon komprimiert wurde :mrgreen:[/OT]

jaenicke 22. Jan 2009 07:23

Re: Strings durch Zahlen effizient ersetzen???
 
Zitat:

Zitat von Bernhard Geyer
[OT] Gabs da nicht mal eine Nachricht das jemand einen Komprimierungsalgorithmus entwickelt haben sollte der jede Datenmenge komprimieren kann egal welche größe oder ob diese mit anderen Algorithmen schon komprimiert wurde :mrgreen:[/OT]

Ich behaupte: das kann ich auch. Wirklich!
Von verlustfrei hast du nix gesagt... *duck und weg* :mrgreen:
SCNR

3_of_8 22. Jan 2009 15:33

Re: Strings durch Zahlen effizient ersetzen???
 
Zitat:

Zitat von jaenicke
Das ist doch mal ein Kunststück. 1500 Motorenhersteller und eine eindeutige Nummer in maximal dreistelligen Zahlen? :shock: :gruebel:

Er hat ja nichts von Dezimalzahlen gesagt. ;)

Nimm hexadezimale Zahlen und schon kannst du in 3 Stellen 4096 Hersteller kodieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz