AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 INI Dateien vergleichen

Ein Thema von Dr. Jack · begonnen am 2. Aug 2012 · letzter Beitrag vom 8. Aug 2012
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: 2 INI Dateien vergleichen

  Alt 3. Aug 2012, 00:12
Abgesehen davon, dass ich die Struktur suboptimal finde und etwas an den Fähigkeiten einer Uni-Datei vorbeiorganisiert ist - und eine echte Datenbank (sei es auch Access) besser wäre - hier ein Lösungsansatz für dein Problem:

Du beschreibst eigentlich genau das Problem. Erst wenn das Element aus Tabelle A mit allen Elementen aus der Tabelle B verglichen wurde, kann man zuverlässig sagen, ob dieses Element in Tabelle B existiert oder eben nicht.

Code:
Für alle Artikel in Tabelle A -> ArtA

  FlagExistiert <- Falsch

  Für alle Artikel in Tabelle B -> ArtB
    Wenn ArtB = ArtA dann FlagExistiert <- Wahr
  Ende Für

  Wenn Nicht FlagExistiert dann
    ArtA in Tabelle B anlegen
  Ende Wenn

Ende Für
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#12

AW: 2 INI Dateien vergleichen

  Alt 3. Aug 2012, 08:53
Da ich ja gestern Abend wohl schon arge Konzentrationsprobleme hatte, nun nochmal von vorn: TInifile.ValueExists bringt dir, wie du schon bemerkt hast, in diesem Fall gar nichts, da es lediglich prüft, ob in einem "Datensatz" ein "Feld" Artikelnummer existiert - das tut es aber immer.

Der Sir hat insofern auch Recht, daß die Verwendung einer INI-Datei als Datenbank in hohem Grade suboptimal ist, da sie dafür nicht gedacht ist. So gestaltet sich das Suchen nach Datensätzen mit bestimmten Feldinhalten als äußerst schwierig, wie wir hier alle feststellen können.

Mit der aktuellen Datenstruktur in den INI-Dateien bleibt nur ein verschachtelter Schleifendurchlauf, wie ihn Sir Rufo skizziert hat. Ich würde in der inneren Schleife allerdings noch ein Break einbauen, wenn der Datensatz gefunden wurde.

Um die Datenstruktur zu verbessern, könnte man die Sections nicht mit der Recordnummer versehen, sondern z.B. mit der Artikelnummer, die ja offensichtlich ein eindeutiger Schlüssel ist. So kann man einfach prüfen, ob eine Artikelnummer vorhanden ist: TInifile.SectionExists . Beim Löschen oder Umbenennen einer Artikelnummer muss dann allerdings die alte Section gelöscht werden: TInifile.EraseSection .

Aus Performancegründen würde sich auch die Verwendung von TMemInifile anbieten - vorausgesetzt, die Dateien sind nicht übergroß; aber dann wäre eh eine andere Lösung angebracht. Bei TMemInifile das UpdateFile nicht vergessen, um Änderungen auf die Platte zu schreiben.

Und ich habe aus diesem Thread auch was gelernt: Wenn jemand mit dem Zaun wedelt, pass auf, daß kein Brett vor deinem Kopf hängen bleibt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dr. Jack

Registriert seit: 17. Mär 2010
78 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#13

AW: 2 INI Dateien vergleichen

  Alt 3. Aug 2012, 21:35
Ok danke für die Struktur und die sehr ausführlichen Hinweise, das werde ich nun versuchen umzusetzen.
Ich hoffe ihr seht mir die aus eurer Sicht einfachen Fragen nach

Geändert von Dr. Jack ( 3. Aug 2012 um 21:47 Uhr)
  Mit Zitat antworten Zitat
Dr. Jack

Registriert seit: 17. Mär 2010
78 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#14

AW: 2 INI Dateien vergleichen

  Alt 3. Aug 2012, 23:08
Tausend Dank, ich hab es... Die Flagvariable ist die Lösung.

(OK die INI-Datei ist wirklich suboptimal, aber sie schafft für das kleine Programm
ca. 70 Artikel/ Sekunde zu lesen )
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#15

AW: 2 INI Dateien vergleichen

  Alt 4. Aug 2012, 01:41
PS: INI über die WinAPI (da braucht man sich nicht wundern, daß diese veraltet und nur für kleine Daten ist) lädt die Datei nicht beim Create.
Und TIniFile kapselt nur die API.

Für jeden einzelnen Lesezugriff wird jedesmal die ganze Datei neu geladen, der Wert gesucht und alles wieder entladen.
Und noch schlimmer sind Schreibzugriffe, wo ebenfalls bei jedem Zugriff die Datei neu gelesen, der Wert verändert, alles zurückgeschrieben und entladen wird.
$2B or not $2B
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: 2 INI Dateien vergleichen

  Alt 4. Aug 2012, 11:48
Die Vorgehensweise dürfe überhaupt relativ fehleranfällig sein. Was machst du denn z. B bei sowas:

Remotefile
[Section1]
Ident1 = 1234

DB
[Section1]
Ident1 = 5678

Angenommen, 1234 ist in der gesamten DB nicht vorhanden, soll also upgedatet werden, der Eintrag ist in der DB jedoch anderweitig vergeben!?
  Mit Zitat antworten Zitat
Dr. Jack

Registriert seit: 17. Mär 2010
78 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#17

AW: 2 INI Dateien vergleichen

  Alt 8. Aug 2012, 00:53
@Bjoerk: Bei den "Nummern" handelt es sich um 8 bzw. 13 stellige EAN-Codes. Dass diese doppeltin meiner lokalen DB existieren halte ich für ausgeschlossen, andernfalls wird der Artikel einfach nicht angelegt.
Die Codes werden von der Gesellschaft GS1 verwaltet, diemachen das schon
Ganz im Gegenteil, du hast teilweise, übertrieben formuliert für jeden Quatsch 5 unterschiedliche EAN-Codes.

@himitsu: Ja ich denke, der ganze Spaß sollte mal langsam in eine SQL-DB rein. Ab und zu fliegt mal eine access violation, ich glaube bei 350 Artikeln kein Wunder, oder?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#18

AW: 2 INI Dateien vergleichen

  Alt 8. Aug 2012, 08:22
Irgendwie hätte es glaub ich auch Sinn gemacht, eine eigene Datenstruktur zu erfinden, wenn man den schon mit einer Textdatei arbeiten möchte. Aber wie auch immer: Eine SQL-DB ist wahrlich der einzig sinnvolle Weg, vor allem, wenn die Datenmenge noch größer wird und wenn man mal fortgeschrittenere Operationen auf der Datenmenge durchführen will.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 09:38 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