Jump to content
Bellamiiii

Batch Script für .ini Dateien

Recommended Posts

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 

Share this post


Link to post
Share on other sites

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.

Edited by lefg

Share this post


Link to post
Share on other sites

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.

 

;-)

Edited by BOfH_666

Share this post


Link to post
Share on other sites

...und außerdem ist das keine INI-Datei im MS-Format, sondern "irgendwas" :-) (Nur damit ich auch was dazu gesagt habe...) Wie @BOfH_666 schon schrub: Es gibt genügend "gute" Formate für so was, warum muß es ein derart krudes Konstrukt sein? Zudem Ihr das wohl selbst programmiert.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
vor 9 Stunden schrieb daabm:

und außerdem ist das keine INI-Datei im MS-Format, sondern "irgendwas"

 

@Martin Das sieht mir nach Speicherprogrammierbare Steuerung (SPS) aus.

Edited by lefg

Share this post


Link to post
Share on other sites

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  

Share this post


Link to post
Share on other sites
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.

Edited by lefg
  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

Hy

 

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 ^^ 

 

 

Share this post


Link to post
Share on other sites
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.

Edited by lefg

Share this post


Link to post
Share on other sites

Da die Aufgabe exakt definierbar ist und ohne Zugriff auf Datenbanken etc. im Firmennetz gelöst werden kann, könnte man für die Entwicklung einen Freiberufler suchen. Allenfalls findet sich an einer Uni ein Student, der damit neben dem Studium etwas Geld verdienen möchte.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...