Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Text einlesen, umwandeln und in einer Zeile wieder ausgeben

Frage Entwicklung Batch & Shell

Mitglied: josken69

josken69 (Level 1) - Jetzt verbinden

19.11.2009 um 14:00 Uhr, 5630 Aufrufe, 8 Kommentare

Hallo

Hallo,
ich möchte eine txt-Datei zeilenweise auslesen, auf eine Zeichenlänge von 128 Zeichen mit Blanksauffülen und dann in einer anderen Datei ohne CRLF als eine Zeile wieder ausgeben.
Die Umwandlung ist erledigt, aber wenn ich das normal mit echo in die neue Datei schreibe, wird ja hinter jede Zeile eine Zeilenschaltung gesetzt. So versuche ich den ganzen Kram erst in einer Variable zu sammlen und erst ganz am Schluss in die Datei zu schreiben. Aber es funktioniert nicht, weil wohl die Ausgabe in die Gesamtzeilen-Varibale bei jedem Durchlauf ausgeführt wird und die Zeiel so zu lang wird. Wie bekomme ich die Batch dazu erst nach der Ausführung der For-Schleife das echo in die Datei auszuführen?
Vielen Dank
01.
  
02.
@echo off & setlocal 
03.
set /p File=Geben Sie bitte den Pfad und die Datei an, die umgeandelt werden soll z.B. c:\pfad\test  
04.
Set "NewFile=c:\Alone\newfile.txt" 
05.
if exist "%NewFile%" del "%NewFile%" 
06.
set "Bak=%File%.bak" 
07.
copy "%File%" "%Bak%" 
08.
Set "lineout= 
09.
set "Blanks100=                                                                                                    " 
10.
for /f "usebackq delims=" %%i in ("%File%") do set "zeile=%%i%Blanks100%" & call :ProcessLine 
11.
Goto :eof 
12.
 
13.
:ProcessLine 
14.
Set "zeile=%zeile:&=§%" 
15.
set "zeile=%zeile:~0,128% 
16.
Set "zeile=%zeile:§=^&%" 
17.
Set "lineout=%lineout%%zeile% 
18.
goto :eof 
19.
 
20.
:Ende 
21.
>>"%NewFile%" (Echo %lineOut%)
Mitglied: bastla
19.11.2009 um 16:18 Uhr
Hallo josken69!

Unter Verwendung eines "Biber-Special" könnte das Unterprogramm ":ProcessLine" so aussehen:
01.
:ProcessLine 
02.
Set "zeile=%zeile:&=§%" 
03.
set "zeile=%zeile:~0,128% 
04.
Set "zeile=%zeile:§=^&%" 
05.
<nul >>"%NewFile%" set /p "dummy=%zeile%" 
06.
goto :eof
Ansonsten wäre in Deinem Ansatz als Zeile 11 ein
goto :Ende
zu empfehlen.

Grüße
bastla
Bitte warten ..
Mitglied: Dominikdak
22.11.2009 um 20:09 Uhr
Zitat von bastla:
Unter Verwendung eines "Biber-Special" könnte das
Unterprogramm ":ProcessLine" so aussehen:
01.
:ProcessLine 
02.
> Set "zeile=%zeile:&=§%" 
03.
> set "zeile=%zeile:~0,128% 
04.
> Set "zeile=%zeile:§=^&%" 
05.
> <nul >>"%NewFile%" set /p 
06.
> "dummy=%zeile%" 
07.
> goto :eof


Hi, ich bin Anfänger im kryptischen Batchgebiet, könntest du mir erklären, was zeile:&=§, zeile:~0,128 und zeile:§=^& bedeuten?
Und was <nul> eigentlich ist?
Bitte warten ..
Mitglied: bastla
22.11.2009 um 22:15 Uhr
Hallo Dominikdak und willkommen im Forum!

Vorweg: Hilfe zu CMD-Befehlen bekommst Du grundsätzlich durch Aufruf des Befehles mit dem Parameter "/?" - im konkreten Fall also etwa:
set /?
Die ersten drei Zeilen des Unterprogramms haben folgenden Sinn:
  • (Temporäres) Ersetzen von in der Zeile vorkommenden "&" durch "§" (oder ein - beinahe - beliebiges anderes Zeichen, das nicht in der Zeile vorkommt)
  • Kürzen der Zeile auf 128 Zeichen
  • Zurückverwandeln der "§" in "&", wobei letztere "maskiert" werden - ein vorangestelltes "^" sorgt dafür, dass das darauf folgende Zeichen nicht "interpretiert", sondern als gewöhliches Zeichen betrachtet (und daher zB einfach ausgegeben wird). Nötig ist diese Vorgangsweise speziell bei den Zeichen "&", "<", "|" und ">", da diese besondere Bedeutung haben - mit "&" werden zB zwei Befehle verknüpft, was ohne Maskierung dazu führen würde, dass etwa ein
echo Dies & das
als Folge der Befehle
echo Dies
sowie
das
verstanden würde, was natürlich definitiv nicht zum gewünschten Ergebnis führt , während
echo Dies ^& das
die vorgesehen Ausgabe erzeugt.
"nul" steht zwar für "Nix", ist aber technisch gesehen ein "Gerät" und kann daher für Ein- bzw Ausgaben verwendet werden - typisches Beispiel:
copy Datei1.txt Datei2.txt >nul
Hier wird eine Datei kopiert, wobei die CMD-Shell den Erfolg stolz mit der Ausgabe von
        1 Datei(en) kopiert.
dokumentiert. Da aber dieser Ausgabe oft unerwünscht ist, wird sie zum Gerät "nul" geschickt (der Vorgang wird "Umleitung" genannt und für Ausgaben durch ">" veranlasst) und verschwindet damit auf Nimmerwiedersehen.

Im Code oben wird "nul" als Eingabegerät verwendet (daher mit "<"), um eine Eingabe als Abschluss des "set /p"-Befehles zu simulieren und damit den Trick "Schreibe in eine Datei ohne abschließende Zeilenschaltung" zu ermöglichen. Wie das funktioniert ist relativ leicht zu erkennen, wenn Du etwa
set /p "Eingabe=Bitte eine Zahl eingeben!"
an der Kommandozeile versuchst - nach dem Text "Bitte eine Zahl eingeben!" wird weder ein Leerzeichen noch eine Zeilenschaltung eingefügt, allerdings wird eine Eingabe erwartet (deshalb im konkreten Fall oben die Simulation unter Verwendung des "nul"-Devices).

In einer Batchdatei könntest Du das zB so nutzen:
@echo off & setlocal 
<nul set /p "Eingabe=Teil 1 des Textes " 
<nul set /p "Eingabe=und Teil 2 des Textes " 
<nul set /p "Eingabe=stehen in der selben Zeile!"
Grüße
bastla
Bitte warten ..
Mitglied: Dominikdak
22.11.2009 um 23:29 Uhr
Wow danke!!
Wenn du mir jetzt noch sagst, was setlocal ist, bin ich gerüstet!

Bitte warten ..
Mitglied: bastla
22.11.2009 um 23:42 Uhr
Hallo Dominikdak!
setlocal /?
Hauptsächlicher Zweck: In diesem Batch erstellte / veränderte Werte von Variablen gelten nur während der Batch läuft, danach nicht mehr - Beispiel:
An der Kommandozeile:
set "Var=Test"
Im Batch:
01.
@echo off & setlocal 
02.
echo %Var% 
03.
set "Var=Anders" 
04.
echo %Var%
Wieder an der Kommandozeile:
echo %Var%
Zweck der Aktion: Es bleiben keine "Reste" vorher gelaufener Batches im Speicher; diese können daher auch nicht zu falschen Ergebnissen eines später gestarteten Batches führen ...

Grüße
bastla

P.S.: Wofür gerüstet?
Bitte warten ..
Mitglied: josken69
23.11.2009 um 09:44 Uhr
Hallo bastla,
vielen Dank für die Antwort. Also das mit dem goto : Ende in Zeile 11 bringts bei mir irgendwie nicht. Kommt dann der Fehler Zeile zu lang.
Die Variante "Biber-Special" funktioniert da schon weit besser. Hier gibt's lediglich den Fehler, dass in der Ausgabedatei dann ein ^ vor meine &-Zeichen steht. Weisst Du, warum und wie ich das noch ausmerzen kann?
Vielen Dank & Gruß Josh
Bitte warten ..
Mitglied: bastla
23.11.2009 um 11:56 Uhr
Hallo josken69!

Das Ersetzen der "&" durch "^&" und die Ausgabe unter Anführungszeichen war dann doch zuviel des Guten - daher in Zeile 5 nur
<nul >>"%NewFile%" set /p dummy=%zeile%
(aber darauf achten, dass sich nicht am Ende noch ein Leerzeichen "einschleicht").

Grüße
bastla
Bitte warten ..
Mitglied: josken69
23.11.2009 um 14:43 Uhr
Hallo bastla,
yep, das war's. Vielen Dank für die Unterstützung.
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Text in Zahlen umwandeln
Tipp von logischeMicrosoft Office

Beim Import von Daten aus anderen Anwendungen kommt es häufig vor, dass Zahlen als Textwerte in der Excel-Tabelle erscheinen. ...

VB for Applications
Text mit Msgbox Ausgeben bei verarbeitung
gelöst Frage von VBSnoob123VB for Applications1 Kommentar

Hallo, hat sich erledigt. hab mich entschlossen das Script in Html darzustellen und die anzeige direkt mit in die ...

Batch & Shell
Ergebnis in Text datei ausgeben
gelöst Frage von caschoplBatch & Shell2 Kommentare

Hallo, irgendwie stehe ich auf dem schlauch. Habe folgende Batch erstellt, aber der Text wier immer überschrieben. Das ergebnis ...

C und C++
String einlesen in Array und wieder ausgeben von hinten
Frage von ProtectedC und C++4 Kommentare

Hallo, ich würde gerne einen String einlesen bzw. char und dann andersrum wieder ausgeben. Also: Otto Maoam zu: maoaM ...

Neue Wissensbeiträge
Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 4 StundenMac OS X1 Kommentar

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 11 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 13 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 16 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1017 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...