![]() |
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? |
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.
|
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 |
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. |
Re: Strings durch Zahlen effizient ersetzen???
Zitat:
Zitat:
Aber das ist ja für die Lösung letztlich egal. |
Re: Strings durch Zahlen effizient ersetzen???
Zitat:
Oder soll die Aufgabe schnell gelöst sein? |
Re: Strings durch Zahlen effizient ersetzen???
Zitat:
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:
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.
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; |
Re: Strings durch Zahlen effizient ersetzen???
Zitat:
|
Re: Strings durch Zahlen effizient ersetzen???
Zitat:
Von verlustfrei hast du nix gesagt... *duck und weg* :mrgreen: SCNR |
Re: Strings durch Zahlen effizient ersetzen???
Zitat:
Nimm hexadezimale Zahlen und schon kannst du in 3 Stellen 4096 Hersteller kodieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz