138701
Goto Top

Datenbank in Textdokument?

Ich habe folgendes Problem:
Ich arbeite mit Batch und möchte eine Textdatei bearbeiten:

C:\test.txt
Marco ; Mustermann
Annika ; Schwarz
Janina ; Müller

Jetzt soll es 3 Optionen geben:

A: Hinzufügen
Name und Nachname werden einzeln eingegeben und in eine neue Zeile abgespeichert.

B: Bearbeiten
Name und Nachname werden einzeln eingegeben und überschreiben die ausgewählte Zeile.

C: Löschen
Eine ganze Zeile mitsamt Zeilenumbruch wird gelöscht.

OPTIONAL:
Man kann eine Variable statt einem Namen eingeben:
(set var=Mustermann)
Option:_
>>>B
Zeile:_
>>>3
Name:_
>>>Janina
Nachname:_
>>>var
Name von Zeile 3 auf Janina Mustermann aktualisiert!


Ich danke euch schon einmal im Voraus für die Hilfe!

Content-Key: 400013

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

Printed on: April 25, 2024 at 04:04 o'clock

Member: Penny.Cilin
Penny.Cilin Jan 31, 2019 at 14:59:26 (UTC)
Goto Top
Hallo,

was hast Du bisher an Code? - Sprich was bisher selbst erstellt? Zeuge uns doch mal den Code, welchen Du bisher entwickelt hast.

Wenn es unbedingt Batch sein sollte, hier etwas Lesefutter bzgl. Windows Batch:

Ansonsten ist eine Textdatei KEINE gute Idee für eine Datenbank.

Gruss Penny
Member: NetzwerkDude
NetzwerkDude Jan 31, 2019 at 15:14:02 (UTC)
Goto Top
Ausser er will eine NoSQL Datenbank aufbauen, dann sinds schlussendlich Textdateien :P
Member: erikro
erikro Jan 31, 2019 at 15:16:08 (UTC)
Goto Top
Moin,

Zitat von @Penny.Cilin:
Zeuge uns doch mal den Code, welchen Du bisher entwickelt hast.

Sagt der Code dann auch Papa zu mir? face-wink

Ansonsten ist eine Textdatei KEINE gute Idee für eine Datenbank.

Ich habe mich auch gefragt, was das soll. Ist das eine Hausaufgabe eines vollkommen durchgeknallten Dozenten? Wieso Textdatei und Batch? Wenn schon, dann wenigstens Powershell, die mit csv halbwegs umgehen kann ...

Die erste Aufgabe ist ganz einfach:

 echo Vorname;Nachname >>test.txt

Den Rest möchte ich nicht mit Batches lösen müssen. face-wink

Liebe Grüße

Erik
Mitglied: 138721
Solution 138721 Feb 03, 2019 updated at 14:55:36 (UTC)
Goto Top
Ich habe folgendes Problem:
Kein Problem sondern ein Krampf. Wohl mal wieder eine Aufgabe eines Prof. jenseits der Rente.
Wenn es dir hier primär um das Üben von Batch geht (hoffentlich!) und ausdrücklich nicht um produktives dann tobe dich hiermit mal aus.
Batch ist für einfache Routineaufgaben geeignet aber um Gottes Willen nicht für Datenbanken (würg...).
Gehen tut alles aber ob man sich das antun will ...nicht wirklich. Lerne besser gleich SQL/PS & Co. ...
@echo off & setlocal
chcp 1252
set "DBFILE=.\db.txt"  
:MAINMENU
cls
echo.
echo =============== MENU ===============
echo.
echo 	[1] User anzeigen
echo.
echo 	[2] User erstellen
echo.
echo 	[3] User bearbeiten
echo.
echo 	[4] User löschen
echo.
echo 	[5] Ende
echo.
choice /C 12345 /M "Bitte wählen:"  
if "%ERRORLEVEL%" == "255" goto :EOF  
if %ERRORLEVEL% == 5 goto :EOF
if %ERRORLEVEL% == 4 goto :DELETEUSER
if %ERRORLEVEL% == 3 goto :EDITUSER
if %ERRORLEVEL% == 2 goto :CREATEUSER
if %ERRORLEVEL% == 1 goto :SHOWUSER
if %ERRORLEVEL% == 0 goto :EOF
goto :EOF

:SHOWUSER
cls
echo.
echo ==== BENUTZER ANZEIGEN ====
echo.
if not exist "%DBFILE%" (  
	echo Es gibt noch keine User. Bitte erstellen sie erst welche.
	timeout /t 2
	goto MAINMENU
)
echo NACHNAME, VORNAME
echo =================
for /f "usebackq tokens=1-2 delims=;" %%a in ("%DBFILE%") DO echo %%b, %%a  
echo.
pause
goto MAINMENU

:CREATEUSER
cls
echo ==== BENUTZER ERSTELLEN ====
echo.
set /p "VORNAME=Vorname eingeben: "  
if "%VORNAME%" == "" (  
	echo Fehler! Vorname darf nicht leer sein
	echo.
	timeout /t 2
	goto CREATEUSER
)
set /p "NACHNAME=Nachname eingeben: "  
if "%NACHNAME%" == "" (  
	echo Fehler! Nachname darf nicht leer sein
	echo.
	timeout /t 2
	goto CREATEUSER
)
echo.
call :USEREXISTS "%VORNAME%;%NACHNAME%" && (  
	echo User mit diesen Namen existiert schon! Eingabe bitte wiederholen.
	echo.
	timeout /t 2
	goto CREATEUSER
) || (
  >>"%DBFILE%" echo.%VORNAME%;%NACHNAME%  
	echo Benutzer '%VORNAME% %NACHNAME%' wurde gespeichert.  
	echo.
	timeout /t 2
)
goto MAINMENU

:EDITUSER
cls
echo ==== BENUTZER BEARBEITEN ====
echo.
set /p "VORNAME=Bestehenden Vornamen des Users eingeben: "  
set /p "NACHNAME=Bestehenden Nachnamen des Users eingeben: "  
echo.
call :USEREXISTS "%VORNAME%;%NACHNAME%" && (  
	findstr /ilvc:"%VORNAME%;%NACHNAME%" "%DBFILE%" >"%TEMP%\db.txt" & move "%TEMP%\db.txt" "%DBFILE%" >nul  
	set /p "VORNAME=Neuen Vornamen eingeben: "  
	set /p "NACHNAME=Neuen Nachnamen eingeben: "  
	setlocal ENABLEDELAYEDEXPANSION
	>>"%DBFILE%" echo.!VORNAME!;!NACHNAME!  
	echo.
	echo. Benutzer '!VORNAME! !NACHNAME!' wurde erstellt.  
	endlocal
	timeout /t 2
	goto MAINMENU
) || (
	echo Benutzer '%VORNAME% %NACHNAME%' existiert nicht! Eingabe wiederholen.  
	echo.
	timeout /t 2
	goto EDITUSER
)
goto MAINMENU

:DELETEUSER
cls
echo ==== BENUTZER LÖSCHEN ====
echo.
set /p "VORNAME=Bestehenden Vornamen des Users eingeben: "  
set /p "NACHNAME=Bestehenden Nachnamen des Users eingeben: "  
echo.
call :USEREXISTS "%VORNAME%;%NACHNAME%" && (  
	findstr /ilvc:"%VORNAME%;%NACHNAME%" "%DBFILE%" >"%TEMP%\db.txt" & move "%TEMP%\db.txt" "%DBFILE%" >nul  
	echo. Benutzer '%VORNAME% %NACHNAME%' wurde gelöscht.  
	timeout /t 2
	goto MAINMENU
) || (
	echo Benutzer '%VORNAME% %NACHNAME%' existiert nicht! Eingabe wiederholen.  
	echo.
	timeout /t 2
	goto DELETEUSER
)

:USEREXISTS
findstr /ibelc:"%~1" "%DBFILE%" >nul 2>&1 && exit /b 0 || exit /b 1  
Gruß l
Mitglied: 138701
138701 Feb 05, 2019 at 16:06:32 (UTC)
Goto Top
Danke für dein Programm, es war mir eine große Hilfe!

Am Anfang habe ich nicht direkt geantwortet, da ich aus mangelnden Kenntnissen noch kein Programm anfertigen konnte.
Der größte Teil deines Programmes war gut verständlich, allerdings habe ich das mit dem "findstr" nicht verstanden.

Könntest du einmal definieren, welche Komponenten des Programmes wofür stehen?
:
Mitglied: 138721
Solution 138721 Feb 05, 2019 updated at 16:13:23 (UTC)
Goto Top
findstr /? hilft für die Optionen.

findstr /ibelc
Bedeutet
/i = suche Case insensitive
/b = Suche vom Anfang des Strings an
/e = Suche vom Ende des Strings an
/l = Suche nach normalen Strings nicht nach Regex
/c = Sucht nach Zeichenfolge buchstabengetreu.
"%~1"
Bedeutet der erste übergebene Parameter an die Subprozedur = Suchname
"%DBFILE%"
Das Datenbankfile
>nul 2>&1
Bedeutet leite STERR nach STDOUT UM und das ganze ins Nirvana damit keine Ausgabe erzeugt wird.

&& exit /b 0
Bedeutet beende Subprozedur mit Exit-Code 0 wenn User gefunden wurde
Bedeutet beende Subprozedur mit Exit-Code 1 wenn User nicht gefunden wurde
Hotly discussed
gleixnerdCheck of ZFW Firewallgleixnerd - 5 CommentsjstrickerWireguard VPN on UDM Pro behind Fritzbox - Handshake did not completejstricker - 3 Comments