senseless
Goto Top

Auswerten von Zeilen ohne bestimmte Buchstabenfolgen

Ich möchte (abhängig von einer bestimmten Nutzereingabe) unterschiedliche Zeilen nach einem Wert durchsuchen, den Inhalt der Zeile aber ohne den Wert ausgeben.

Ich habe ein kleines Batch-Script geschrieben, indem sich die Sprache einstellen lässt (Deutsch und Englisch). Da ich dzu Variablen benutze und nicht das ganze Script zweimal schreiben möchte, habe ich ein Problem:

Zur Identifikation der Zeilen habe ich Werte genutzt und in eine andere Datei geschrieben, z.B.:

AE1 Welcome
AE2 Please setup your current settings!
AD1 Willkommen!
AD2 Bitte stellen Sie Ihre momentanen Einstellungen ein!

Problem:
Die Zeilen sollen ausgelesen und dann als Variablen gesetzt werden - nur ohne AE1, AE2, etc.!

Hab's schon mit find, findstr und ein paar Varianten von for /f... probiert, leider erfolgslos.
Da ich in diesem Bereich (andere Dateien auslesen und Variablen setzen) vollkommen neu und bislang unerfahren bin, bitte ich euch um Hilfe!

Content-Key: 128405

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

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

Mitglied: 60730
60730 Nov 01, 2009 at 16:33:06 (UTC)
Goto Top
Auch dir eine Begrüssung deiner Wahl...

An deiner Stelle würde ich das ganz anders machen....(so wie es fast jeder macht)

If "%lang%=deu" set "langfile=deu.lng"  
If "%lang%=enu" set "langfile=enu.lng"  

...und nicht alles in einer Riesen Language Datei.

Gruß
Member: rubberman
rubberman Nov 01, 2009 at 16:37:27 (UTC)
Goto Top
Hallo Senseless,

für das Beispiel:
-die Datei heißt Werte.txt
-nach AE1, AE2 ... soll gesucht werden.

@echo off &setlocal
set such=AE2

for /f "tokens=1*" %%i in ('findstr /b /c:"%such%" "Werte.txt"') do set "var=%%j"  
echo %var%
pause

oder der erste Teil der Zeile dient als Variablenname:
@echo off &setlocal
for /f "tokens=1*" %%i in (Werte.txt) do set "%%i=%%j"  
echo %AE2%
pause

Grüße
rubberman
Member: Senseless
Senseless Nov 02, 2009 at 19:26:45 (UTC)
Goto Top
Danke für eure Ideen und entschuldigt mich, dass ich nicht so frei war und eine Begrüßung geschrieben habe, ich war in Gedanken weniger im Thread sondern mehr in der verzwickten Batch-Datei...

@ TimoBeil:

Dein Vorschlag klingt gut und vernünftig, nur das Problem mit den Zeilen bleibt: Wie bekomme ich die Übersetzung/den Text aus dem File, ohne die vorangestellte Variable?
Ich mache mir weniger Sorgen um das Differenzieren der Sprachen, da ich mir folgendes ausgedacht habe:

- Es gibt je Sprache 35 Zeilen an Text
- Der Syntax ist wie folgt:
A%SPRACHE%%ZEILE%
A ist ein ferster Wert ohne weitere Bedeutung, %SPRACHE% ist endweder E (Englisch) oder D (Deutsch), die %Zeile% erklärt sich von alleine.

Die Datei sieht so aus:

[ENGLISH]
[EN_INTERACTIONS]

AE1	Press Enter to continue
AE2		Note some facts:
...

Die Einträge in eckigen Klammer dienen nur der Orrientierung in der Datei (werde ich nicht mehr brauchen, weil ich es umarbeiten werde, wie du es mir empfohlen hast).

Um erstmal alle Variablen auszuwerten habe ich mir folgendes am Anfang des Scriptes einfallen lassen:

set ZEILE=0
:set_lang
set zeile=%zeile%+1
if %zeile%==36 goto finished_lang
echo # # # Loading language file...
echo           Currently loading: A%SPRACHE%%ZEILE%...
REM Hier muss noch der korrekte Befehl zur Auswertung ohne A%SPRACHE%%ZEILE% der Zeile wiederzugeben...
goto set_lang
:finished_lang
echo # # # Finished loading %SPRACHE%-strings!
REM Unten kommen dann die schon bestehenden Instanzen hin...

@ rubberman:

Danke für deinen Ansatz, aber leider gibt mir schon die CMD folgendes als Ergebnis aus:
"%%i" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Eine Batch zeigt mir folgendes:
Echo ist ausgeschaltet (OFF).

Beide hatten folgende Eingabe:

@echo off &setlocal 
set such=AE2 

for /f "tokens=1*" %%i in ('findstr /b /c:"%such%" "ConvertIt_LANG-FILE.ini"') do set "var=%%j  
echo %var% 
pause

Wie gesagt bin ich nicht sehr bewandert in der Benutzung des FOR-Befehles...

Wäre nett, wenn ihr mir weiterhelfen würdet!
Aber danke schonmal für eure Ideen!

Bye, Senseless