Bellamiiii 0 Geschrieben 10. September 2019 Melden Teilen Geschrieben 10. September 2019 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 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 10. September 2019 Melden Teilen Geschrieben 10. September 2019 Ersetze die ini doch gleich komplett. Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 10. September 2019 Melden Teilen Geschrieben 10. September 2019 Ich würde sowas mit der Powershell angehen. Das sollten/könnten deine Hauptakteure sein. Get-Content ForEach-Object Compare-Object Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 10. September 2019 Melden Teilen Geschrieben 10. September 2019 (bearbeitet) 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. bearbeitet 10. September 2019 von lefg Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 10. September 2019 Melden Teilen Geschrieben 10. September 2019 Für echte INI-Dateien gibt es eine uralte API. Die ist z.B. in Kixtart implementiert. Für Powershell liefert Google: https://github.com/lipkau/PsIni Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 10. September 2019 Melden Teilen Geschrieben 10. September 2019 (bearbeitet) 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 10. September 2019 von BOfH_666 Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 10. September 2019 Melden Teilen Geschrieben 10. September 2019 ...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. Zitieren Link zu diesem Kommentar
mwiederkehr 373 Geschrieben 10. September 2019 Melden Teilen Geschrieben 10. September 2019 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. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 11. September 2019 Melden Teilen Geschrieben 11. September 2019 (bearbeitet) 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. bearbeitet 11. September 2019 von lefg Zitieren Link zu diesem Kommentar
Bellamiiii 0 Geschrieben 11. September 2019 Autor Melden Teilen Geschrieben 11. September 2019 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 Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 11. September 2019 Melden Teilen Geschrieben 11. September 2019 (bearbeitet) 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 11. September 2019 von lefg 1 1 Zitieren Link zu diesem Kommentar
Bellamiiii 0 Geschrieben 11. September 2019 Autor Melden Teilen Geschrieben 11. September 2019 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 ^^ Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 11. September 2019 Melden Teilen Geschrieben 11. September 2019 (bearbeitet) 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 11. September 2019 von lefg Zitieren Link zu diesem Kommentar
mwiederkehr 373 Geschrieben 11. September 2019 Melden Teilen Geschrieben 11. September 2019 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. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 11. September 2019 Melden Teilen Geschrieben 11. September 2019 Zwei Dateien aneinanderzuhängen ist möglich mit Copy oder Xcopy. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.