Jump to content

Batch Script für .ini Dateien


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Leute =) 

 

Da ich mich leider in meiner Schulzeit bei Programmieraufgaben eher drumrum geschummelt habe, brauche ich mal ein paar Batch Asse ^^ 

 

folgendes ...

 

ich bin durch unseren Programmierer darauf angewiesen, dass unsere Workstations für unsere Programme nur mit .ini Dateien konfigurier bar sind. 

Nun möchte ich nicht bei jeder Neuerung des Programmes diese immer wieder neu anfassen müssen um die Einträge zu tätigen.

Als Ausgangssituation habe ich also eine ini die vom Entwickler kommt, aber jede Workstation in manchen Einträgen was anderes stehen haben (z.B. Stationsnummern sind unterschiedlich).

hier mal ein kleiner Auszug:

 

DB:
wolf
SPS position (5101/5201/5301/5401/5501/5801 (like 5101 for press one 5201 for press 2 and so on) :
5
Press No. (Workplace No for press):
5201
 

 

So ist der Aufbau der ini´s ..(natürlich sehr verkürzt)

Jetzt habe ich also eine ini vom Entwickler und eine meiner Workstation... 

Mittels einer Batch Datei möchte ich gerne, dass die Entwickler ini als Referenz dient.

nun die Anforderungen:

- beide Batch Dateien zeilenweise vergleichen 

-> wenn etwas in der Workstation ini steht kann zur nächsten Zeile gesprungen werden

-> steht etwas in der Entwickler ini z.B. in Zeile 25 und in der WS ini nicht , soll da der Eintrag von der EW ini zur WS ini passieren 

-> sollte ein Eintrag statt gefunden haben MUSS nach meinem Verständnis von vorne begonnen werden die Dateien zu Vergleichen, da ja die folgenden Zeilennummern sich durch einen Eintrag geändert haben

 

zur Veranschaulichung

 

EW ini  

 

DB:
wolf
SPS position (5101/5201/5301/5401/5501/5801 (like 5101 for press one 5201 for press 2 and so on) :
5
Press No. (Workplace No for press):
5201

Warning message timer:
15

 

WS ini

DB:
wolf
SPS position (5101/5201/5301/5401/5501/5801 (like 5101 for press one 5201 for press 2 and so on) :
5
Press No. (Workplace No for press):
5201

hier fehlt Warning...  dieser Eintrag soll bitte in WS kopiert werden 

Ich hoffe das war Verständlich ^^  

 

Grüße 

Link zu diesem Kommentar

Ich bin bei Dukel. Wenn Du sowieso schon was Neues baust, dann kannst Du auch gleich was Vernünftiges bauen. Alles ist besser als INI ... und mit Powershell einigermaßen vernünftig zu verarbeiten ... Registry, XML, JSON oder YAML  ... und natürlich nicht zu vergessen PowershellDataFile.

 

;-)

bearbeitet von BOfH_666
Link zu diesem Kommentar

Ich würde wenn möglich auch ein besseres Dateiformat verwenden. Aber manchmal ist solche Spezialsoftware ja schon älter als man selbst...

 

Falls es dieses Format sein muss, würde ich beide Dateien in C# in ein Dictionary laden. Also den Zeilenumbruch nach dem Doppelpunkt entfernen und dann Zeilenweise lesen und beim Doppelpunkt splitten.

 

Dann geht es dank LINQ einfach:

var sourceIni = new Dictionary<string, string>();
var targetIni = new Dictionary<string, string>();

sourceIni.Add("wert1", "test");
sourceIni.Add("wert2", "123");
sourceIni.Add("wert3", "xxx");

targetIni.Add("wert1", "test");
targetIni.Add("wert3", "yyy");
targetIni.Add("wert4", "4");

var newIni = targetIni.Concat(sourceIni).GroupBy(d => d.Key).ToDictionary(g => g.Key, v => v.First().Value);
var toRemove = targetIni.Where(k => !sourceIni.ContainsKey(k.Key));

"newIni" enthält dann die Werte beider Dateien, wobei die schon in der Zieldatei vorhandenen Werte Vorrang haben. Werte, die es in der Quelldatei nicht mehr gibt, bleiben erhalten. In der Variable "toRemove" stehen diese und könnten mit

var total = newIni.Except(toRemove);

entfernt werden. Danach das Dictionary wieder in die Datei schreiben.

 

C# lässt sich auch in PowerShell-Scripts einbinden, falls Du keine EXE machen willst.

Link zu diesem Kommentar

Hy Leute,

 

Danke erstmal für die vielen Kommentare =)

Wie schon erwähnt wurde ist die Entstehung des Programmes , sowie der Aufbau der Ini sehr viel älter als ich in der Firma bin.

unser Programmierer ist leider nicht im Haus, da er aus einem andren Land mit gelegentlichen Besuchen Vorort hier für uns arbeitet. =D

Daher ist die Umstellung in ein neues Format eher nicht Möglich.

 

Die Ini erweitert sich nur wenn von der Produktion neue Anforderung an das Programm gestellt werden, daher dachte ich mit einer 1-klick batch wäre das ganze entspannter zu "Updaten".

Dabei sollte ich immer die Möglichkeit haben, die neue Ini vorher im Programm zu testen um Fehler auszuschließen. Deshalb muss das Programm nicht im Intervall "Updaten" sondern per Klick ausführbar sein. 

 

Was ich noch sagen wollte in der aktuellen ini gibt es auch Zeilen in denen nicht steht..... sollte also in beiden in Zeile z.B. 69 nichts stehen dann kann diese auch übersprungen werden.

 

Ich hoffe ihr findet für mich eine Lösung und könnte das Bitte in ein Syntax packen, da mir Programmieren/Scripten nicht liegt =D

 

Grüße  

Link zu diesem Kommentar
vor 22 Minuten schrieb Bellamiiii:

Ich hoffe ihr findet für mich eine Lösung und könnte das Bitte in ein Syntax packen,

 

Moin

 

Hier gibt es Leute, die verdienen mit IT-Service das Einkommen für die Familie, Brillies für die Dame, Schulgeld für die Kinder.

 

Und was Du möchtest, halte ich für schwierig da testaufwändig und lohnt sich professionell nicht da nicht kalkulierbar.

 

Wir hier geben ohne Entlohnung i.d.R. Hilfestellung, geben Rat bei konkreten technischen Problemen, das hat aber Grenzen. Manche Dinge sind in einem Forum nicht machbar. Letztendlich muss jemand in der EDV tätiger selbst die Sache lösen.

bearbeitet von lefg
  • Like 1
  • Danke 1
Link zu diesem Kommentar
vor 22 Stunden schrieb lefg:

Per Kommandointerpreter (in Batch) einer INI Zeilen anhängen geht mit dem Befehl. Echo. Also wird die Datei am unteren Rand um Zeilen verlängert. Ich kenne keine reguläre Option zum gesteuerten Editieren in Zeilen der Datei.

 

vor 1 Stunde schrieb Bellamiiii:

ich hab ja nur gefagt ob es die Möglichkeit gibt ^^ . Da sich meine Programmierfähigkeiten in Grenzen halten, wusste ich natürlich nicht welchen Aufwand das ganze mit sich zieht.

Wenn du aber sagst das es den Rahmen sprengt, dann hab ich wohl einfach Pech ^^ 

 

:)

 

Du hast meinen Beitrag gelesen?

 

Ich frage trotzdem mal nach, was in der INI konkret geändert werden sollte? Falls es z.B. nur der Name ist, der immer an der selben Stelle steht, dann könnte es nicht allzu schlimm sein. Falls es aber völlig unbestimmt ist dann wird es schwieriger und aufwändiger.  Wie ich schon schrieb, es gibt im Kommandointerpreter CMD keine reguläre Möglichkeit dazu. Es sei denn, mit W10 wurde die Möglichkeit eingeführt und ich habe davon nichts mitbekommen.

 

Eben ist mir eine ziemlich lange Erläuterung entglittten. Momentan möchte ich den nicht neu schreiben.

 

Es ist in Wirklichkeit nicht möglich, eine vorhandene Datei direkt zu verändern. Dazu wird mit einem geeigneten Editor eine Kopie$ geöffnet, verändert, gespeichert, umbenannt, die alte gelöscht.

bearbeitet von lefg
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...