![]() |
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 |
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. |
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 ![]()
Delphi-Quellcode:
Freundliche Grüße vom marabu
var
nr, line: String; begin line := '[Nr: 1234] name=abc'; nr := Between(line, '[Nr: ', ']'); end; |
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 ) |
Re: Vergleichen von .txt's / Benutzen von "Markern"
Code:
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:
[Nr: 1024] name=Example
Wert1_Beispiel= 512 Wert2_Beispiel= 256 [Nr: 2048] name=McDonalds Wert1_McDonalds= 768 Wert2_McDonalds= 512
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 08:25 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-2025 by Thomas Breitkreuz