virtu-al
Goto Top

Per Batch in vielen Text Dateien rechnen

Konstante subtrahieren

Hallo an alle Batch Profis!

Hab schon alles hier durchforstet bin aber zu schwach um vorhandene Codes zu modifizieren.
Soweit ich mitbekommen habe ist mein Problem für euch aber keines(hoffentlich).

Folgends Problem:
Ich habe ca. 2000 TXT Files die alle gleich strukturiert sind, und zwar exakt so:

0.5
-0
-0
-0.5
635000.25
289999.75

Die ersten 4 Zeilen sind überall gleich und sollen es auch bleiben, die Zeile 6 bleibt auch unverändert.
Die Zeilen 5 und 6 haben in jeder TXT Datei andere Werte, die Länge der Zahlen bleibt aber gleich.

Problemkind ist die Zeile 5, hier soll in allen TXT Dateien ein konstanter Wert subtrahiert werden(oder addiert).

Bin für jede Idee dankbar.

lg
VirtuAl

Content-ID: 133230

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

Ausgedruckt am: 16.11.2024 um 15:11 Uhr

Biber
Biber 12.01.2010 um 11:57:48 Uhr
Goto Top
Moin Virtu-Al,

zwei Rückfragen.
  • wie /woran willst du erkennen, ob es sich bei der Zeile fünf um einen schon korrigierten/noch zu korrigierenden Wert handelt? Sollen die frisierten Dateien in einem anderen Verzeichnis und oderunter einem anderen Namen abgelegt werden? (wenn du halt vorher/nachher nur 2000 xyz-Dateien in einem Verzeichnis hast und einen Batchlauf startest, der bei Datei 666 abbricht...... da ist die Restartfähigkeit nicht hoch)
  • Wegen Wahl des Werkzeugs: "Im Batch rechnen" geht eigentlich nur mit Ganzzahlen. Daher wäre Batch ( i.S. von reine CMD-Befehle) nur sinnvoll, wenn zumindest der zu addierende Wert ganzzahlig ist. Sonst sollten wir gleich mit VBSkript/JScript starten.

Grüße
Biber
Virtu-Al
Virtu-Al 12.01.2010 um 13:49:27 Uhr
Goto Top
Hi !

Sinnvoll wäre es die korrigierten Dateien in ein anderes Verzeichnis zu dulizieren, somit wäre auch klar dass diese Dateien schon korrigiert sind. Weiters wäre aufgrund des Wertes selbst klar ob eine Korrektur stattgefunden hat oder nicht.
Es werden 6-stellige Werte subtrahiert also wäre das eindeutig, außerdem würde es in der weiterführenden Verwendung der txt files sofort auffallen.
Punkto "ganzzahlig" ist das natürlich eine schlechte Nachricht, es werden zwar nur Ganzzahlen subtrahiert aber die Werte werden negativ. Also ist eine Lösung via Batch nicht möglich :/

Wäre die angesprochene VBA Lösung sehr aufwendig ?

lg und danke
VirtuAl
Biber
Biber 12.01.2010 um 14:26:40 Uhr
Goto Top
Moin Virtu-Al
Zitat von @Virtu-Al:
Hi !

Sinnvoll wäre es die korrigierten Dateien in ein anderes Verzeichnis zu dulizieren,
somit wäre auch klar dass diese Dateien schon korrigiert sind.
Duplizieren wäre in der Tat ein möglicher Weg..
Weiters wäre aufgrund des Wertes selbst klar ob eine Korrektur stattgefunden hat oder nicht.
Es werden 6-stellige Werte subtrahiert also wäre das eindeutig, ....
Ja nee... schon klar. Allerdings muss dafür irgendein Freiwilliger in 2000 von 2000 Dateien die Zeile 5 angucken. Meldest du dich dafür?
.... außerdem würde es in der weiterführenden Verwendung der txt files sofort auffallen.
Einer meiner ehemaligen Kollegen hatte mal einen fast gleich lautenden flapsigen Plan in der falschen Runde von sich gegeben... er war sonst sehr nett.
Punkto "ganzzahlig" ist das natürlich eine schlechte Nachricht, es werden zwar nur Ganzzahlen subtrahiert aber die Werte werden negativ.
Ganzzahlig heißt "ohne Nachkommastellen", aber durchaus auch im negativen Bereich. Kein Thema.
Also ist eine Lösung via Batch nicht möglich :/
Das hab ich nicht gesagt. Aber wenn beispielsweise jeweils 6666.33 [Einheiten] hinzu/heruntergerechnet werden müssten, per Batch aber eigentlich nur 6666 oder 6667 [Einheiten] rechenbar wären, dann wäre es albern, sowas nachzubilden.

Wäre die angesprochene VBA Lösung sehr aufwendig ?
VBS. VB-Skript, nicht VB für Applikations. Nein. Vergleichen mit einem Klassentreffen oder damit, eine 67er Import-Harley durch den Bremer TÜV zu bringen.

Ein Beispiel zum "eine Zeile pro Textdatei mit VBSkript ersetzen in zig Dateien" hatte bastla grad gestern am 11.1. sehr schön aus dem Ärmel geschüttelt.
Schau es mal bitte an.

Ansonsten hast du freie Wahl, ob Batch oder VBS. Wirf eine Münze.

Grüße
Biber
TsukiSan
TsukiSan 12.01.2010 um 15:13:15 Uhr
Goto Top
ich kann mir's nicht verkneifen, Biber, aber ich mag deine Antworten! face-smile
Aber genau so sollte Virtu-AI an seine Problematik rangehen.

Weiter so!

Gruß

Tsuki
bastla
bastla 12.01.2010 um 16:26:29 Uhr
Goto Top
Hallo Virtu-Al!
Ansonsten hast du freie Wahl, ob Batch oder VBS. Wirf eine Münze.
Falls Du gerade keine Münze hast, kannst Du auch eine EC-Karte nehmen (das sollte damit sogar 2010 noch funktionieren face-wink) ...

Vielleicht hilft aber auch dieser (als Recycling-Produkt des von Biber angesprochenen gestrigen Scripts entstandene) VBS-Ansatz bei der Entscheidungsfindung:
Folder = "D:\Ordner"  
FolderDone = "D:\Ordner\bearbeitet"  
Zeile = 5
Diff = -100000

Set fso = CreateObject("Scripting.FileSystemObject")  
If Not fso.FolderExists(FolderDone) Then fso.CreateFolder(FolderDone)
If Right(FolderDone, 1) <> "\" Then FolderDone = FolderDone & "\"  
For Each File In fso.GetFolder(Folder).Files
    If fso.GetExtensionName(File.Name) = "txt" Then  
        Lines = Split(File.OpenAsTextStream(1).ReadAll, vbCrLf)
        Lines(Zeile - 1) = Replace(Replace(Lines(Zeile - 1), ".", ",") + Diff, ",", ".")  
        fso.CreateTextFile(FolderDone & File.Name).Write Join(Lines, vbCrLf)
    End If
Next
Grüße
bastla
Virtu-Al
Virtu-Al 13.01.2010 um 13:38:28 Uhr
Goto Top
Zitat von @Biber:

> Weiters wäre aufgrund des Wertes selbst klar ob eine Korrektur stattgefunden hat oder nicht.
> Es werden 6-stellige Werte subtrahiert also wäre das eindeutig, ....
Ja nee... schon klar. Allerdings muss dafür irgendein Freiwilliger in 2000 von 2000 Dateien die Zeile 5 angucken. Meldest du
dich dafür?
was durch die Duplizierung entfällt

> .... außerdem würde es in der weiterführenden Verwendung der txt files sofort auffallen.
Einer meiner ehemaligen Kollegen hatte mal einen fast gleich lautenden flapsigen Plan in der falschen Runde von sich gegeben... er
war sonst sehr nett.
ich glaube nicht dass du das beurteilen kannst ob das im weiteren Prozess auffällt...


Big thx @ bastla, funktioniert klasse so und erspart mir viel Arbeit.
Grüße
Virtu-Al