connecthor
Goto Top

Inhalt einer txt auslesen und bei übereinstimmung Zeilen aus andered Datei einfügen

Hallo @all

ich hätte da ein kleines Problemchen--->

also ich hab da eine Datei in der ein Wert (z.b. [profil=0]) steht. Danach stehen noch ein paar andere Werte. Ich möchte danach noch weitere einträge einfügen. Das klappt schon.
Nun das echte Problem. Ich habe 2 unterschiedliche Einträge zu machen, je nach dem in welcher reihenfolge der user sich die Dateien installiert.

Hauptdatei <<<

[profil=0]
zeile1
zeile2
zeile3


dann soll sich der user ein programm installieren und in der Hauptdatei soll ein wert eingtragen werden wie folgt:

[profil=1]
zeile1
zeile2
zeile3

dann gibt es weitere programme die installiert werden können. Leider muss der Wert [profil] IMMER im Format
[profil=0]
...
[profil=1]
...
[profil=2]
...

vorliegen.

Was muss ich machen, um den schon installierten passus " [profil=*] auszulesen und bei weiteren installationen im richtigen format in der Datei zu hinterlegen??

Vielen Dank für eure Hilfe
Kommentar vom Moderator Biber am Apr 05, 2010 um 19:55:21 Uhr
Zwei klar vor- und ausgezeichnete Lösungsansätze - Beitrag auf "Beantwortet" gesetzt.

Content-Key: 139781

Url: https://administrator.de/contentid/139781

Printed on: April 16, 2024 at 06:04 o'clock

Member: bastla
bastla Apr 02, 2010 at 18:34:23 (UTC)
Goto Top
Hallo connecthor!

Ließe sich Deine Problemstellung auf "Finde die niedrigste noch nicht in '[profil=Zahl]' enthaltene Zahl!" reduzieren?

In diesem Fall etwa so:
@echo off & setlocal
set "Datei=D:\Die.ini"  
set /a Nr=0

:Loop
findstr /i /l "[profil=%Nr%]" "%Datei%">nul || goto :Found  
set /a Nr+=1
goto :Loop

:Found
set "Wert=[profil=%Nr%]"  
echo %Wert%
Grüße
bastla
Mitglied: 77559
77559 Apr 04, 2010 at 17:16:12 (UTC)
Goto Top
Hallo Bastla,

mit nur einem findstr und Vergleich der Nr dürfte das doch effizienter sein.
(auch wenn das in diesem Fall egal ist)

@echo off & setlocal EnableDelayedExpansion
set "Datei=c:\Test\2010-04\Die.ini"  
Set Nr=0
For /f "tokens=2 delims=[=]" %%A in (  
  'findstr /i /l "[profil=" "%Datei%"'  
    ) Do If %%A GTR !Nr! Set Nr=%%A
set /a Nr+=1
set "Wert=[profil=%Nr%]"  
echo %Wert%

Gruß
LotPings

Edit: Anregung von Bastla eingearbeitet
Member: bastla
bastla Apr 04, 2010 at 18:15:30 (UTC)
Goto Top
Hallo LotPings!

Gute Idee face-smile, handwerklich fehlt allerdings "delayedExpansion" - es wird dadurch in der aktuellen Fassung immer "GTR 0" verglichen, was auch gut geht, wenn die Nummern innerhalb der ".ini"-Datei brav aufsteigend verwendet wurden; dann allerdings wäre der Vergleich überhaupt unnötig, und es müsste einfach die letzte vorkommende Nummer um 1 erhöht werden.

Eine Abwandlung davon - nämlich tatsächlich die ".ini" vorweg zu sortieren - würde aber daran scheitern, dass die Nummern keine feste Stellenanzahl haben.

Grüße
bastla
Mitglied: 77559
77559 Apr 05, 2010 at 15:46:46 (UTC)
Goto Top
Zitat von @bastla:
Gute Idee face-smile, handwerklich fehlt allerdings "delayedExpansion"

Du hast ja sowas von Recht face-wink
Danke, habe es schon geändert

Ostergrüße
LotPings
Member: connecthor
connecthor Apr 08, 2010 at 16:50:58 (UTC)
Goto Top
Ja, so hab ich mir das gedacht. Profile=0 ist standard. hinzu sollen dann immer profile=1 usw. egal in welcher reichenfolge die programme installiert werden. ich werds mal gleich testen... danke schon mal im vorraus
Member: connecthor
connecthor Apr 13, 2010 at 08:58:21 (UTC)
Goto Top
ich habs jetzt... BASTLA hatte die beste (einzige lösung)
LotPings lösung war noch nicht ganz vollständig... es wurde das [profil=x] nicht um eins erhöht.

mein script sieht jetzt so aus:
set "User=%USERPROFILE%"
set "Datei=%USER%\anwendungsdaten\info.ini"
findstr /l "umb-storno" "%Datei%" && goto copy

set /a Nr=0
:Loop
set /a Nr+=1
goto :Loop

:Found
set "Wert=[profile%Nr%]"
echo. >> "%Datei%"
echo %Wert% >> "%Datei%"
more "d:\dazu.txt" >> "%Datei%"

:copy
...

vieken dank für eure hilfe jungs!!!!
Mitglied: 77559
77559 Apr 13, 2010 at 09:49:19 (UTC)
Goto Top
Zitat von @connecthor:
ich habs jetzt... BASTLA hatte die beste (einzige lösung)
LotPings lösung war noch nicht ganz vollständig... es wurde das [profil=x] nicht um eins erhöht.

Protest,
entsprechend deinen Vorgaben funktioniert das hier.
Hast du den letzten Stand berücksichtigt?
Zeile 7 erhöht die höchste gefundene Profil Nr um eins.

Damit meine Variante auch bei leerer Datei funktioniert, könnte man noch Zeile 3 ändern in:
Set Nr=-1

Gruß
LotPings
Member: connecthor
connecthor Apr 15, 2010 at 08:25:27 (UTC)
Goto Top
hab dein script probiert...
leider hat er immer nur [profile=1] eingefügt... keine ahnung warum.
hast du das mal getestet???
Mitglied: 77559
77559 Apr 15, 2010 at 10:11:14 (UTC)
Goto Top
Ja, ich habs nochmal getestet.
Einzige Änderung in Zeile 3 auf -1, (Der alte Beitrag lässt sich mehr editieren).

Ich vermute mal einen Übertragungsfehler - bitte "in den Speicher kopieren" oder Quelltext ansehen+kopieren.
Computer sind ja so schrecklich konsequent - tun genau das und nur das, was ihnen vorgegeben wird.

Gruß
LotPings
Member: connecthor
connecthor Apr 16, 2010 at 07:29:21 (UTC)
Goto Top
dann mach ich irgendwas falsch..
das [profil=0] ist standard.
bei dir wird doch nur soweit ich sehe der erste gefundene wert genommen und +1 gesetzt.
da ist dann egal welche werte da noch stehen... oder?!?!?!
Mitglied: 77559
77559 Apr 16, 2010 at 07:50:09 (UTC)
Goto Top
Moin moin,

nein Zeile 4-6 ist eine Schleife die alle gefundenen "[profil="-Zeilem mit dem vorherigen Maximalwert vergleicht und ihn ggfs ersetzt.
Man kann diese 3 Zeilen auch ohne Änderung der Funktion hinereinander in eine Zeile schreiben, ich finde es so halt übersichtlicher.

Gruß
LotPings