Batch-Problem Inhalt aus Datei auslesen, bearbeiten und dann wieder speichern
Hallo Com,
Ich habe eigentlich ein relativ simples Problem.
Meine Ausgangsdatei ist so aufgebaut:
0,00h
1,00h
2,18h
3,00h
4,00h
5,00h
6,00h
7,00h
8,00h
9,00h
10,00h
11,00h
12,00h
13,00h
14,00h
15,00h
16,4Fh
17,80h
18,80h
19,80h
231,00h
232,00h
Es ist eine txt-Datei.
Ich möchte jetzt, dass der Inhalt eingelesen wird und folgendermaßen wieder ausgegeben wird.
/sc00000/sc00100/sc00218
Also der Aufbau ist:
/s + c0 + Zahl vor dem Komma in Hexadezimal umwanlden + Zahl nach dem Komma ohne h hinschreiben.
Das ganze soll dann wieder in einer txt-Datei ausgegeben werden.
Ich habe mir gedacht, dass es mit Batch ganz gut. Nur ich habe viel zu wenig Ahnung davon und bin so auf etwas Unterstützung angewiesen.
Vielen Dank
Ich habe eigentlich ein relativ simples Problem.
Meine Ausgangsdatei ist so aufgebaut:
0,00h
1,00h
2,18h
3,00h
4,00h
5,00h
6,00h
7,00h
8,00h
9,00h
10,00h
11,00h
12,00h
13,00h
14,00h
15,00h
16,4Fh
17,80h
18,80h
19,80h
231,00h
232,00h
Es ist eine txt-Datei.
Ich möchte jetzt, dass der Inhalt eingelesen wird und folgendermaßen wieder ausgegeben wird.
/sc00000/sc00100/sc00218
Also der Aufbau ist:
/s + c0 + Zahl vor dem Komma in Hexadezimal umwanlden + Zahl nach dem Komma ohne h hinschreiben.
Das ganze soll dann wieder in einer txt-Datei ausgegeben werden.
Ich habe mir gedacht, dass es mit Batch ganz gut. Nur ich habe viel zu wenig Ahnung davon und bin so auf etwas Unterstützung angewiesen.
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 232921
Url: https://administrator.de/forum/batch-problem-inhalt-aus-datei-auslesen-bearbeiten-und-dann-wieder-speichern-232921.html
Ausgedruckt am: 09.04.2025 um 18:04 Uhr
9 Kommentare
Neuester Kommentar
Hallo AllForOne94 und willkommen im Forum!
Ich würde (hinsichtlich der Konvertierung in Hex) VBS bevorzugen, das ließe sich aber zur Not auch in Batch erledigen - allerdings ist mir die gewünschte Ausgabe nicht wirklich klar: Soll aus der gesamten Datei tatsächlich nur eine Zeile entstehen, bzw wie viele Zeilen der Ausgangsdatei (lt Deinem Beispiel wären das zunächst einmal 3) sollen zu einer Zeile in der Ergebnisdatei zusammengefasst werden?
Soferne jeweils wieder eine eigene Zeile entstehen soll, als VBScript etwa so:
[Edit] Da wir nun wissen, dass es nur eine Ausgabezeile geben soll, wäre die Zeile 10 auf
und die Zeile 13 auf
zu ändern.
[/Edit]
Grüße
bastla
Ich würde (hinsichtlich der Konvertierung in Hex) VBS bevorzugen, das ließe sich aber zur Not auch in Batch erledigen - allerdings ist mir die gewünschte Ausgabe nicht wirklich klar: Soll aus der gesamten Datei tatsächlich nur eine Zeile entstehen, bzw wie viele Zeilen der Ausgangsdatei (lt Deinem Beispiel wären das zunächst einmal 3) sollen zu einer Zeile in der Ergebnisdatei zusammengefasst werden?
Soferne jeweils wieder eine eigene Zeile entstehen soll, als VBScript etwa so:
Ein = "D:\Ausgangsdatei.txt"
Aus = "D:\Ergebnisdatei.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Daten = Split(fso.OpenTextFile(Ein).ReadAll, vbNewline)
For Each Zeile In Daten
If Trim(Zeile) <> "" Then
Werte = Split(Replace(Zeile, "h", ""), ",")
Ausgabe = Ausgabe & vbNewLine & "/sc0" & Right("0" & Hex(Werte(0)), 2) & Werte(1)
End If
Next
fso.CreateTextFile(Aus).Write Mid(Ausgabe, 3)
Ausgabe = Ausgabe & "/sc0" & Right("0" & Hex(Werte(0)), 2) & Werte(1)
so.CreateTextFile(Aus).Write Ausgabe
[/Edit]
Grüße
bastla
Hallo,
hier eine Möglichkeit mit JScript (als ausbaufähige Vorlage):
VG
LS
hier eine Möglichkeit mit JScript (als ausbaufähige Vorlage):
// Ein- uns Ausgabe DateieNamen definieren
var src="___in.txt";
var dst="___out.txt";
// Ein- und Ausgabe Dateien oeffnen
var fp1 = OpenFile(src, "r");
var datei = fp1.ReadAll();
fp1.Close();
var fp2 = CreateFile(dst);
// Hilfsvariablen
var zeile = "";
var s1 = "";
var s2 = "";
var zeileOut = "";
var i = 0;
var x = 0;
var saZeilen = datei.split("\r\n");
for (i = 0; i < saZeilen.length; i++) {
zeile = saZeilen[i];
if (zeile.indexOf(",") > 0) {
// Teil vor dem Komma
s1 = zeile.split(",");
s1 = parseInt(s1,16);
// Teil nach dem Komma
s2 = zeile.split(",")[1];
s2 = s2.substring(0, s2.length - 1);
// ... und zusammenbauen
zeileOut = "/sc0" + s1 + "/sc0" + s2;
fp2.WriteLine(zeileOut);
x++;
}
}
fp2.Close();
WScript.Echo("OK, "+x+" Zeilen gelesen und ...");
/////////////////////////////////////////////////////////////////////////////////////////////
/** Create TextDatei.
* @param name String kompletter Dateiname
* @return tf Objekt FilePointer
*/
function CreateFile(name) {
var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject");
tf = fso.CreateTextFile(name, true);
return tf;
}
/** Open TextDatei.
* @param name String kompletter Dateiname
* @return tf Objekt FilePointer
*/
function OpenFile(name, mod) {
var fso, tf, mode;
if (mod == "r") {
mode = 1;
}
if (mod == "w") {
mode = 2;
}
if (mod == "a") {
mode = 8;
}
fso = new ActiveXObject("Scripting.FileSystemObject");
tf = fso.OpenTextFile(name, mode);
return tf;
}
VG
LS
Hi,
ungefähr so ?
Quelle toHex-Funktion: dostips.com
Grüße Uwe
ungefähr so ?
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "fileIN=c:\daten_in.txt"
set "fileOUT=C:\daten_out.txt"
for /f "usebackq tokens=1,2 delims=," %%a in ("%fileIN%") DO @(
call :toHex %%a hex
set nachkomma=%%b
set nachkomma=!nachkomma:~0,2!
set merge=!merge!/sc!hex!!nachkomma!
)
echo !merge!>"%fileOUT%
goto end
:toHex
set /a dec=%~1
set "hex="
set "map=0123456789ABCDEF"
for /L %%N in (1,1,8) do (
set /a "d=dec&15,dec>>=4"
for %%D in (!d!) do set "hex=!map:~%%D,1!!hex!"
)
set "hex=!hex:~5,3!
(
ENDLOCAL
SET %~2=%hex%
)
goto :eof
:end
Grüße Uwe
Die Hex-Umwandlung ist drin, Zeile 25: String.parsInt(value, basis)
Siehe http://www.w3schools.com/jsref/jsref_parseint.asp
VG
LS
Siehe http://www.w3schools.com/jsref/jsref_parseint.asp
VG
LS
Zitat von @AllForOne94:
Edit: Ein kleines Problem gibt es noch.
Am Anfang wenn 01 etc nur einstellig ist wird statt 01 nur 1 geschrieben. Ich bräuchte aber ein 01.
ist angepasst.Edit: Ein kleines Problem gibt es noch.
Am Anfang wenn 01 etc nur einstellig ist wird statt 01 nur 1 geschrieben. Ich bräuchte aber ein 01.