Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Vergleichen von .txt's / Benutzen von "Markern" ... (https://www.delphipraxis.net/64838-vergleichen-von-txts-benutzen-von-markern.html)

Shizo 8. Mär 2006 22:45


Vergleichen von .txt's / Benutzen von "Markern" ..
 
Moin zusammen =)

Ich habe vor vorhandene .txt's mit "neuen" zu vergleichen.
Bestimmte Werte sollen hierbei überprüft und geändert / hinzugefügt werden.
Vielleicht habt ihr ja ein paar Anregungen für mich ?

Die .txt's haben folgenden Aufbau:

Original
---------------------------------

[Nr: 1024] name=Example
Wert1_Beispiel= 512
Wert2_Beispiel= 256

[Nr: 2048] name=McDonalds
Wert1_McDonalds= 768
Wert2_McDonalds= 512
...

Neue .txt
----------------------------------

[Nr: 1024] name=Beispiel
Wert1_Beispiel= 512
Wert2_Beispiel= 256

[Nr: 2000] name=Neu
Wert1_Neu= 768
Wert2_Neu= 512

[Nr: 2048] name=McDoof
Wert1_McDonalds= 768
Wert2_McDonalds= 512
...
----------------------------------

Die original .txt soll erhalten bleiben, es sollen lediglich die rot markierten Inhalte aus
der neuen .txt in die neue geschrieben werden. (auch die Nr.2000 die noch NICHT vorhanden ist)
Es soll also eine Abfrage geben ob die Nummer in der original .txt schon vorhanden ist.
Wenn ja, wird nur der Name hinter dem Marker "=" ersetzt, wenn nein werden die kompletten
Werte (blau markierten zeilen) bis zu dem Marker "leerzeile" in die original txt geschrieben.

Die Namen in der original .txt sind englisch und werden somit ins deutsche übersetzt.
Und Objekte die noch nicht im original vorhanden sind werden nun reingeschrieben.

So in etwa ist die vorstellung die ich da hab.
Nur fehlen mir leider spezifische Kenntnisse zu den benötigten Abfragen und Funktionen.
Wär nett wenn jmd von euch mir ein paar Tipps geben könnte ;)

(PS: es sind tausende zeilen ^^)

Thx und tausend Dank im Vorraus

Nikolas 8. Mär 2006 23:33

Re: Vergleichen von .txt's / Benutzen von "Markern"
 
Per Pos kannst du das Vorkommen eines Strings in einem anderen Überprüfen. Wenn du dann nach '[Nr.' suchst, kannst du die Ziffern danach auslesen und eine Liste mit den vorhandenen Nummern erstellen.
Das machst du dann mit beiden Listen und vergleichst, welche Zahlen übereinstimmen. Per Stringreplace kannst du dann die Namen ersetzen.

marabu 9. Mär 2006 06:37

Re: Vergleichen von .txt's / Benutzen von "Markern"
 
Herzlich willkommen in der Delphi-PRAXiS, Shizo.

Wer hat dieses Datenformat verbrochen? Wenn du Einfluß darauf nehmen kannst, dann sorge dafür, dass der Marker auf einer eigenen Zeile steht - die Verarbeitung wird dadurch zum Kinderspiel.

Andernfalls müsstest du beschreiben, ob noch weitere Bedingungen gelten. Günstig wäre es, wenn deine Marker in beiden Dateien die gleiche Ordnung aufweisen würden. Du könntest die Dateien dann klassisch verarbeiten, ohne sie komplett im Hauptspeicher zu halten.

Die Nummer kannst du dir dann so besorgen:

Delphi-Quellcode:
var
  nr, line: String;
begin
  line := '[Nr: 1234] name=abc';
  nr := Between(line, '[Nr: ', ']');
end;
Freundliche Grüße vom marabu

Shizo 9. Mär 2006 16:45

Re: Vergleichen von .txt's / Benutzen von "Markern"
 
Ich danke euch :)

Also ich kann keinen Einfluss auf die .txt's (scrips) nehmen da ich sie von "externer quelle" beziehe und sie nur meinen wünschen anpassen möchte.
Und da monatlich neuerungen dazukommen benötige ich eben eine Automatisierung ;)

Ich werd mit beiden Varianten mal nen bissl rumprobieren...
Hoff es klappt so wie ich es mir vorstell.

Wird bestimmt nicht der letzte thread von mir gewesen sein ^^
(erstmal wieder in die materie reinfinden, da ich seit 1 jahr nich mehr mit delphi gearbeitet hab :P )

Andreas L. 9. Mär 2006 16:56

Re: Vergleichen von .txt's / Benutzen von "Markern"
 
Code:
[Nr: 1024] name=Example
Wert1_Beispiel= 512
Wert2_Beispiel= 256

[Nr: 2048] name=McDonalds
Wert1_McDonalds= 768
Wert2_McDonalds= 512
Mir kommts so vor als wäre das eine INI-Datei. Eigentlich sollte hinter der Eck-Klammer nichts stehen sondern dies in der nächsten Zeile sein. Evtl. packt einen solchen Code die ini-Funktion trotzdem. INI kannst du so in deiner Anwendung verwenden:

Delphi-Quellcode:
uses ..,inifiles;

...

procedure blubb(sender: Tobject);
var
 ini : tinifile;
begin
 ini:=tinifile.create('C:\datei.ini');
//der wert aus der inidatei wird in ein editfeld geschrieben, aufbau der inifunktion: 1. param: Sektion (das zwischen den Eckklammern), Name, Default-Wert
edit1.text:=ini.readstring('Nr: 1024','Wert1_Beispiel','');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 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