AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Strings durch Zahlen effizient ersetzen???
Thema durchsuchen
Ansicht
Themen-Optionen

Strings durch Zahlen effizient ersetzen???

Ein Thema von Pam · begonnen am 21. Jan 2009 · letzter Beitrag vom 22. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Pam

Registriert seit: 21. Jan 2009
1 Beiträge
 
#1

Strings durch Zahlen effizient ersetzen???

  Alt 21. Jan 2009, 22:13
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?
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Strings durch Zahlen effizient ersetzen???

  Alt 21. Jan 2009, 22:14
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

Registriert seit: 16. Feb 2008
Ort: Boppard
540 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Strings durch Zahlen effizient ersetzen???

  Alt 22. Jan 2009, 00:57
Du müsstest vllt. mal ein paar Beispielzeilen geben.

Die sind eine etwas festere (Nahrungs-)Quelle als sone öde erklärung
Björn Zeutzheim
Codename: Performancepumpe
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Strings durch Zahlen effizient ersetzen???

  Alt 22. Jan 2009, 01:14
Dafür ist Delphi gar nicht nötig.
Nimm doch eine Standardanwendung wie Excel oder Calc (OpenOffice).
TEIL, SVERWEIS sind dort dann deine Freunde.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Strings durch Zahlen effizient ersetzen???

  Alt 22. Jan 2009, 05:37
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 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?

Aber das ist ja für die Lösung letztlich egal.
Sebastian Jänicke
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Strings durch Zahlen effizient ersetzen???

  Alt 22. Jan 2009, 07:07
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?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Strings durch Zahlen effizient ersetzen???

  Alt 22. Jan 2009, 07:31
Zitat von jaenicke:
Das ist doch mal ein Kunststück. 1500 Motorenhersteller und eine eindeutige Nummer in maximal dreistelligen Zahlen?
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Strings durch Zahlen effizient ersetzen???

  Alt 22. Jan 2009, 08:14
Zitat von alzaimar:
Zitat von jaenicke:
Das ist doch mal ein Kunststück. 1500 Motorenhersteller und eine eindeutige Nummer in maximal dreistelligen Zahlen?
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 [/OT]
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Strings durch Zahlen effizient ersetzen???

  Alt 22. Jan 2009, 08:23
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 [/OT]
Ich behaupte: das kann ich auch. Wirklich!
Von verlustfrei hast du nix gesagt... *duck und weg*
SCNR
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Strings durch Zahlen effizient ersetzen???

  Alt 22. Jan 2009, 16:33
Zitat von jaenicke:
Das ist doch mal ein Kunststück. 1500 Motorenhersteller und eine eindeutige Nummer in maximal dreistelligen Zahlen?
Er hat ja nichts von Dezimalzahlen gesagt.

Nimm hexadezimale Zahlen und schon kannst du in 3 Stellen 4096 Hersteller kodieren.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 Uhr.
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