Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Textdatei bearbeiten, vergleichen, auslesen und in eine vorhandene Textdatei einfügen.

Frage Entwicklung Batch & Shell

Mitglied: vitalis

vitalis (Level 1) - Jetzt verbinden

01.05.2010 um 20:57 Uhr, 5309 Aufrufe, 13 Kommentare

Hallo zusammen

Suche eine Möglichkeit mit Hilfe von CMD einige einfache schritte zu automatisieren, die Aufgabenstellung ist folgende: habe 2 Textdateien „quelle.txt“ und „EURUSD – 4 Stunden.txt“ die „quelle.txt“ hat folgende Datensätze (es wird auch vorkommen das die zahlen folgendes Format haben 98.56; bitte mit bedenken)
EURUSD - 4 Stunden

High
1.3328;
1.3337;
1.3338;
…….
1.3340;
1.3336;
1.3337;
1.3335;
1.3337;
1.3333;
1.3329;
1.3315;
Als erstes soll in dieser Datei der Semikolon und die letzte Zeile gelöscht werden (in diesem Beispiel die 1.3315)
Als zweites muss die Zieldatei ermittelt werden und das soll über die 1 Zeile geschehen (1 Zeile = „Zieldateiname.txt“) hoffentlich ist das machbar.
Sollte das vorhaben bis jetzt noch nicht gescheitert sein kommen wir nun zum schritt drei, dabei soll in der „Zieldatei.txt“ nach den letzten 5 Zeilen gesucht und mit der „quelle.txt“ verglichen werden, nach einer Übereinstimmung die fehlenden werte ausgelesen und in die „Zieldatei.txt“ von hinten eintragen. Das war die Aufgabe ich hoffe es findet sich jemand der mir helfen kann. Danke für eure Hilfe.

Mit freundlichen Grüßen Vitali.
Mitglied: SamvanRatt
01.05.2010 um 22:07 Uhr
Schau dir mal sed (=Seriell Editor) an; den gibt es auch für NT Systeme und ist frei; wenn man seinen Syntax im Griff hat kann man damit große Sachen machen und ist voll batchbar
Gruß
Sam
Bitte warten ..
Mitglied: bastla
01.05.2010 um 22:51 Uhr
Hallo vitalis und willkommen im Forum!

1 und 2 sollte sich so machen lassen:
01.
@echo off & setlocal 
02.
set "Quelle=D:\quelle.txt" 
03.
set "QuellTemp=%temp%\Quelle.txt" 
04.
 
05.
set /p Ziel=<"%Quelle%" 
06.
for /f "delims=:" %%i in ('findstr /n "^" "%Quelle%"') do set "ZNr=%%i" 
07.
move "%Quelle%" "%QuellTemp%" 
08.
for /f "tokens=1-2* delims=:;" %%i in ('findstr /n "^" "%QuellTemp%"') do if %%i neq %ZNr% (echo\%%j)>>"%Quelle%" 
09.
echo Zieldatei: %Ziel%
Teil 3 ist mir allerdings überhaupt nicht klar - kannst Du das noch anhand von Beispieldaten darstellen?

Grüße
bastla
Bitte warten ..
Mitglied: vitalis
02.05.2010 um 14:27 Uhr
Hallo SamvanRatt danke für den Tipp werde mir das ganze mal ansehen.

Hallo bastla auch dir vielen, vielen dank der Code funktioniert bis jetzt perfekt so wie erwünscht, beim 3 teil hattest du recht für jemanden der die zusammenhänge nicht kennt ist es unmöglich zu verstehen wovon ich quatsche also versuche ich anhand eines Beispiels den 3 schritt zu erklären.

Zieldatei > „EURUSD - 4 Stunden.txt“
EURUSD - 4 Stunden

High
1.3679
1.3677
1.3659
……..
1.3735
1.3694
1.3695<<<<<<1
1.3680<<<<<<2
1.3686<<<<<<3
1.3635<<<<<<4
1.3642<<<<<<5 (Letzte Zeile)
<<<<<<<<<<<< (Neue Daten hier rein)

Quelldatei > „quelle.txt“
EURUSD - 4 Stunden

High
1.3679;
1.3677;
1.3659;
…….
1.3670;
1.3693;
1.3642 ;<<<<<< (Falsche Zeile)
1.3772;
……..
1.3811;
1.3642 ;<<<<<< (Falsche Zeile)
1.3757;
………
1.3735;
1.3694;
1.3695 ;<<<<<<1
1.3680 ;<<<<<<2
1.3686 ;<<<<<<3
1.3635 ;<<<<<<4
1.3642 ;<<<<<<5 (Richtige Zeile)(Letzte Zeile der Zieldatei)
1.3652 ;<<<<<< (Neue Daten)
..............<<<<<< (Neue Daten)
1.3648 ;<<<<<< (Neue Daten)
1.3639 ;<<<<<< (Letzte Zeile, wird in teil 1 zusammen mit dem Semikolon gelöscht)
Noch etwas zum besseren Verständnis, die Quelldatei > „quelle.txt“ wird in regelmäßigen abständen neu erstellt dabei kommen jedes mal neue Daten hinzu (sehe oben) und der 3 schritt soll nun dafür sorgen das diese Daten richtig ermittelt und in die Zieldatei eingetragen (vervollständigt) werden.
Ich hoffe man kann mein vorhaben jetzt nachvollziehen, herzlichen dank für deine Hilfe.

Mit freundlichen Grüßen Vitali.
Bitte warten ..
Mitglied: bastla
02.05.2010 um 17:33 Uhr
Hallo Vitali!

Sorry - ich versteh's weiterhin nicht. Das Ermitteln der Werte aus den letzten 5 Zeilen der Datei "EURUSD - 4 Stunden.txt“ würde ich ja noch (als Ergänzung des Ansatzes oben) hinbekommen:
01.
set "Ziel=%Ziel%.txt" 
02.
set ZNr= 
03.
for /f "delims=:" %%i in ('findstr /n "^" "%Ziel%"') do set "ZNr=%%i" 
04.
if not defined ZNr echo Keine Daten in "%Ziel%" gefunden! & pause & goto :eof 
05.
set /a Ab=%ZNr%-5 
06.
if %Ab% lss 0 set Ab=0 
07.
for /f %%i in ('more +%Ab% "%Ziel%"') do echo %%i
- nur ist mir nicht klar, wie der Vergleich dann vonstatten gehen soll, bzw konkret:

  • Was macht die Zeile mit "1.3642 ;" zu einer "falschen" Zeile, und welche Konsequenz für die eine oder die andere Datei soll sich daraus ergeben?
  • Warum ist die dritte derartige Zeile dann aber "richtig", und was folgt daraus?
  • Und welche Rolle spielen bei dem Ganzen die letzten 5 Zeilen der "quelle.txt"?

Vielleicht kannst Du ja die einzelnen Schritte 3b, 3c, ... (3a wäre das Heraussuchen der letzten 5 Zeilen der Zieldatei) nochmals detailliert beschreiben ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
02.05.2010 um 19:21 Uhr
Hallo bastla!

Na, dann versuch ich es mal zu erklären

Stell Dir vor, Du bekommst alle 4 Stunden - oder wie auch immer - eine neue Quelldatei mit den Devisenkursen der letzten 4 Stunden und möchtest diese fortlaufend in der Zieldatei anfügen. Dabei überschneiden sich die Kursdaten in der Quell- und Zieldatei. D.h. um den richtigen Anschluß zu finden, soll der letzte Block ala 5 Kursdaten von der Zieldatei in der neuen Quelldatei zusammenhängend gesucht/verglichen werden und wenn die Stelle in der Quelldatei gefunden ist, die anschließenden Kursdaten fortlaufend in der Zieldatei angefügt werden.

Zieldatei:
01.
1.3694 
02.
1.3695<<<<<<1 
03.
1.3680<<<<<<2 
04.
1.3686<<<<<<3 
05.
1.3635<<<<<<4 
06.
1.3642<<<<<<5 
07.
< ab hier neue Daten aus Quelldatei anfügen
Aktuelle Quelldatei, Semikolons und letzte Zeile Löschen und zusammenhängenden 5er-Block suchen :
01.
... 
02.
1.3695 ;<<<<<<1 in Zieldatei schon vorhanden 
03.
1.3680 ;<<<<<<2 in Zieldatei schon vorhanden 
04.
1.3686 ;<<<<<<3 in Zieldatei schon vorhanden 
05.
1.3635 ;<<<<<<4 in Zieldatei schon vorhanden 
06.
1.3642 ;<<<<<<5 in Zieldatei schon vorhanden  
07.
1.3652 ;<<<<<<  ab hier neue Daten in Zieldatei anfügen 
08.
...
Hoffe, Du hast es jetzt verstanden?

Gruß Dieter

PS. Ideal wäre natürlich, wenn die einzelnen Kursdaten eine vorangestellete Zeitangabe hätten, also z.B. Spalte 1 Datum/Zeit und Spalte 2 Devisenkurs..
Bitte warten ..
Mitglied: vitalis
02.05.2010 um 20:46 Uhr
Hallo Leute

Wie es aussieht bin ich einfach zu dämlich um das richtig zu erklären, Gott sei Dank hat sich didi1954 hier rein verirrt er hat es auf den Punkt gebracht genau das soll als letztes getan werden.

@ didi1954 du hast recht es wäre einfacher mit Datum und Uhrzeit zu arbeiten, es ist auch kein Problem die Quelldatei mit all diesen Informationen zu erstellen. Nur jetzt kommt das große ABER ich brauche die Zieldatei um diese in ein externes Programm zu laden um es auswerten zu können und offensichtlich lädt das Programm nicht nur den Kurs sondern versucht die ganze Zeile zu laden das führt zu einem Fehler und letztendlich darf ich die werte dann per Hand eintragen wäre schön wenn das hier klappen würde.

Mit freundlichen Grüßen Vitali.
Bitte warten ..
Mitglied: bastla
03.05.2010 um 00:50 Uhr
Hallo Vitali und Dieter!
Wie es aussieht bin ich einfach zu dämlich um das richtig zu erklären
Da war aber leider auch ein ordentliches Maß an Begriffsstutzigkeit auf meiner Seite im Spiel - danke jedenfalls an Dieter ...

Mit dem folgenden Batch (als VBScipt wär's vielleicht etwas eleganter geworden) lässt sich zwar sicher kein Schönheitspreis gewinnen, aber er sollte zumindest das gewünschte Ergebnis bringen (ist allerdings nur oberflächlich getestet):
01.
@echo off & setlocal 
02.
set "Quelle=quelle.txt" 
03.
set "QuellTemp=%temp%\Quelle.txt" 
04.
 
05.
::Zieldateinamen ermitteln 
06.
set /p Ziel=<"%Quelle%" 
07.
 
08.
::Zeilenanzahl der Quelldatei feststellen und in %ZNr% speichern 
09.
for /f "delims=:" %%i in ('findstr /n "^" "%Quelle%"') do set "ZNr=%%i" 
10.
 
11.
::Quelldatei in Temporärdatei umwandeln und aus dieser ... 
12.
move "%Quelle%" "%QuellTemp%" 
13.
 
14.
::... zeilenweise neu erstellen (und dabei das Semikolon durch 
15.
::  Deklaration als Trennzeichen eliminieren) -  
16.
::  dazu alle Zeilen mit Ausnahme der letzten Zeile (zu erkennen 
17.
::  durch den Vergleich der Zeilennummer in %%i mit %ZNr%) 
18.
::  in die neue Quelldatei schreiben 
19.
for /f "tokens=1-2* delims=:;" %%i in ('findstr /n "^" "%QuellTemp%"') do if %%i neq %ZNr% (echo\%%j)>>"%Quelle%" 
20.
 
21.
::Zieldateinamen um Dateityp ergaenzen  
22.
set "Ziel=%Ziel%.txt" 
23.
 
24.
::Zeilenanzahl der Zieldatei feststellen und in %ZNr% speichern 
25.
set ZNr= 
26.
for /f "delims=:" %%i in ('findstr /n "^" "%Ziel%"') do set "ZNr=%%i" 
27.
 
28.
::falls ZNr keinen Wert hat, wurden keine Zeilen gefunden - Abbruch 
29.
if not defined ZNr echo Keine Daten in "%Ziel%" gefunden! & pause & goto :eof 
30.
 
31.
::Position der Zeile, nach welcher die letzten 5 Zeilen der Zieldatei beginnen 
32.
set /a Ab=%ZNr%-5 
33.
 
34.
::sollte die Zieldatei weniger als 5 Zeilen enthalten, nur die 
35.
::  tatsächlich vorhandenen Zeilen verwenden 
36.
if %Ab% lss 0 set Ab=0 
37.
 
38.
::Variablen initialisieren 
39.
set /a ZAnz=0 & set "Vergleich=" & set "Erste=" 
40.
 
41.
::Zeilen ab der berechneten Position in der Zieldatei zeilenweise auslesen 
42.
::  und im Unterprogramm :ProcessLine (beim Aufruf Übergabe der Zeile) 
43.
::  zu einem Vergleichs-String zusammensetzen 
44.
for /f %%i in ('more +%Ab% "%Ziel%"') do call :ProcessLine "%%i" 
45.
 
46.
::Variablen initialisieren 
47.
set "ZNr=" & set "Fertig=" 
48.
 
49.
::alle Vorkommen der ersten Zeile des aus der Zieldatei entnommenen 
50.
::  Zeilenblocks von (bis zu) 5 Zeilen suchen und jeweils unter 
51.
::  Übergabe der Zeilennummer das Uterprogramm :ProcessBlock 
52.
::  zur Überprüfung, ob der gesuchte Block gefunden wurd, aufrufen, 
53.
::  falls dieser nicht berits vorher gefunden wurde (dann ist die 
54.
::  Variable %Fertig% schon gesetzt) 
55.
for /f "delims=:" %%i in ('findstr /n "%Erste%" "%Quelle%"') do if not defined Fertig call :ProcessBlock %%i 
56.
 
57.
::Ende Hauptprogramm 
58.
goto :eof 
59.
 
60.
:ProcessLine 
61.
::erste Zeile des Blocks aus der Zieldatei in Variable schreiben 
62.
if not defined Erste set "Erste=%~1" 
63.
 
64.
::Zeilenanzahl hochzählen 
65.
set /a ZAnz+=1 
66.
 
67.
::Vergleichs-String um übergebenen Zeileninhalt ergänzen 
68.
set "Vergleich=%Vergleich%%~1" 
69.
goto :eof 
70.
 
71.
:ProcessBlock 
72.
::%Noch% mit der Anzahl der Zeilen des Blocks vorbelegen 
73.
::%Ab% auf die Nummer der letzten zu überspringenden Zeile 
74.
::  (=1 Zeile vor Beginn des zu prüfenden Blocks in der 
75.
::   Quelldatei) setzen 
76.
set /a Noch=%ZAnz% & set "Vergleich2=" & set /a Ab=%1-1 
77.
 
78.
::Zeilen ab Beginn des Blocks durchgehen und daraus zweiten 
79.
::Vergleichs-String erstellen 
80.
for /f %%a in ('more +%Ab% "%Quelle%"') do call :ProcessLine2 "%%a" 
81.
 
82.
::Vergleich der beiden Strings - bei Übereinstimmung wurde 
83.
::der Block in der Quelldatei gefunden und kann an die 
84.
::Zieldatei angefügt werden; durch Setzen der Variablen 
85.
::%Fertig% signalisieren, dass nicht mehr weitergesucht 
86.
::werden muss 
87.
if "%Vergleich%"=="%Vergleich2%" ( 
88.
    more +%Ab% "%Quelle%">>"%Ziel%" 
89.
    set "Fertig=True" 
90.
91.
goto :eof 
92.
 
93.
:ProcessLine2 
94.
::Soferne noch nicht gleich viele Zeilen, wie im Block 
95.
::  aus der Zieldatei enthalten sind, in den zweiten 
96.
::  Vergleichs-String aufgenommen wurden, die über- 
97.
::  gebene Zeile hinufügen 
98.
if %Noch% gtr 0 set "Vergleich2=%Vergleich2%%~1" 
99.
 
100.
::Restanzahl der hinzuzufügenden Zeilen verringern 
101.
set /a Noch-=1 
102.
goto :eof
Zum Ausgleich für meine lange Leitung habe ich mir ein paar Kommentarzeilen abgerungen ...

Grüße
bastla

P.S.: Wenn die Werte in der Quelldatei tatsächlich mit einem Timestamp versehen werden können, sollte es eigentlich genügen, die Zeitangabe aus der letzten in die Zieldatei übertragenen Zeile zwischenzuspeichern und beim nächsten Lauf des Batches nach der damit aufzufindenden Zeile wieder anzusetzen ...

[Edit] @LotPings: Strg-a und Strg-c vor dem Senden habe ich mir auch mehr oder weniger mühsam angewöhnen müssen ... [/Edit]
Bitte warten ..
Mitglied: LotPings
03.05.2010 um 00:58 Uhr
Hallo Vitali,

dieser Abgleich 5 aufeinaderfolgender Zeilen ist nicht trivial, da sich schon in diesen Zeilen eine Teilsequenz wiederholen könnte, man muss also bei einem Abbruch wieder zurück was beim sequentiellen Lesen nicht geht. Also muss man beim Lesen immer die letzten 5 Zahlen mitführen und \"durchschieben\" um neu aufsetzen zu können.

Wenn die Semikolon in der Quelle entfernt sind, kann man übrigends mit dem Programm WinMerge sehr schön die Unterschiede anzeigen bzw. auch übernehmen (dazu muss in den Optionen bei Vergleich verschobene Blöcke angehakt werden).

Bis auf die oben angesprochene Möglichkeit der Teilsequenz funktioniert diese Batch hier nach den angegebenen Kriterien.
01.
@Echo off & SetLocal EnableDelayedExpansion 
02.
CD /D "D:\Neuer Ordner" 
03.
Set Src=Quelle.txt 
04.
set /P Dst=<"%Src%" 
05.
set "Dst=%Dst%.txt" 
06.
if Not Exist "%Dst%" Echo kann Ziel %Dst% nicht finden & Exit /B 1 
07.
 
08.
:: Ermittle Länge von Dst 
09.
set DstCnt=0 
10.
For /f %%A in ( 
11.
  'Findstr "^[0-9][0-9.]" "%Dst%" ^|find /V /C "#"' 
12.
    ) Do Set /A "DstCnt=%%A" 
13.
 
14.
If %DstCnt% LSS 5 Echo Weniger als 5 Werte in %Dst% & Exit /B 2 
15.
Set /A DstCnt-=5 
16.
 
17.
:: Letzte 5 einlesen 
18.
Set OLCnt=0 
19.
For /f "skip=%DstCnt% Delims=;" %%A in ( 
20.
  'Findstr "^[0-9][0-9.]" "%Dst%"' 
21.
    ) Do Set "Overlap!OLCnt!=%%A" & Set /A "OLCnt+=1" 
22.
 
23.
:: Quelle einlesen 
24.
Set OLCnt=0 
25.
If defined Last Set "Last=" 
26.
 
27.
For /f "Delims=; " %%A in ('More +3 %Src%') Do Call :Check %%A 
28.
 
29.
If %OLCnt% LSS 5 Echo Konnte keine Ueberlappung ermitteln & Exit /B 3 
30.
Echo Done 
31.
Exit /B 0 
32.
 
33.
:Check 
34.
if %OLCnt% Gtr 4 Goto :Append 
35.
If "!OverLap%OLCnt%!" EQU "%1" Set /A "OLCnt+=1" & Goto :Eof 
36.
IF %OLCnt% GTR 0 Set "OLCnt=0" & goto :Check 
37.
Set OLCnt=0 
38.
Goto :Eof 
39.
 
40.
:Append 
41.
Echo Append %Last% 
42.
If Defined Last >> "%Dst%" Echo.%Last% 
43.
Set "Last=%1" 
44.
Goto :Eof

Gruß
LotPings

@bastla, wenn mich der timeout nicht gequält hätte wär ich schneller gewesen
Edit: neue Zeile 2 zum Wechsel in den Ordner der Dateien eingefügt
Bitte warten ..
Mitglied: vitalis
03.05.2010 um 12:35 Uhr
Hallo Leute

Als erstes möchte ich euch danken das ihr versucht einem hoffnungslosen fall wie mir zu helfen. Leider begrenzt sich mein wissen über Batch auf die Tatsache das man damit tolle Sachen machen kann und das war’s auch schon. In den Codes haben sich kleine Fehler versteckt die ich selber nicht erkennen und schon gar nicht beseitigen kann darum bin ich gezwungen euch weiterhin zu nerven und um Hilfe zu bitten.

@bastla dein Code funktioniert so gut wie perfekt, leider mit einem winzigen Fehler und den erkennt man, wen man die Kursdaten durch fortlaufende Zahlen ersetzt.

Beispiel:

1
2
3--------
4
5(die letzten 5 Zeilen der Zieldatei)
6
7--------
3--------
4
5(dieser Block wiederholt sich + Neue Daten)
6
7--------
8
9
10

Ich möchte aber dass sich die Daten nicht wiederholen sondern einfach fortgesetzt werden.
Habe ein wenig rumgespielt und durch das ändern der Zeile 32 in deinem Code auf den wert -1 konnte ich folgendes Ergebnis erzielen:

1
2
3
4
5
6
7
8----- (dabei erscheint
8----- nur eine Zahl doppelt)
9
10
11
12

Setze ich den wert nun auf 0 funktioniert die Datei nicht mehr vielleicht hast du ein Tipp.


@LotPings deine Datei konnte ich nicht testen hat nicht funktioniert bevor ich zum Fehler komme hier noch eine Kleinigkeit, die Ziel- und Quelldatei befinden sich unter d:\Neuer Ordner\Quelle.txt und d:\Neuer Ordner\“erste zeile der quelldatei“.txt (habe das Gefühl es ist wichtig).
Nachdem ich festgestellt habe das die Datei nicht funktioniert habe ich zwischen den einzelnen Befehlen eine pause eingebaut und folgendes ist dabei raus gekommen:

Drücken Sie eine beliebige Taste . . .
Drücken Sie eine beliebige Taste . . .
Drücken Sie eine beliebige Taste . . .
Drücken Sie eine beliebige Taste . . .
Drücken Sie eine beliebige Taste . . .
Auf die Datei D:\Neuer kann nicht zugegriffen werden.
Drücken Sie eine beliebige Taste . . .
Drücken Sie eine beliebige Taste . . .

Möglicherweise kann dir das weiterhelfen den Fehler zu finden oder mich darauf hinzuweisen was ich falsch gemacht habe.

Noch mal Herzlichen Dank für eure Hilfe, Batch ist für mich ein dichter, dunkler Wald ich schäme mich in Grund und Boden.

Mit freundlichen Grüßen Vitali.
Bitte warten ..
Mitglied: LotPings
03.05.2010 um 13:04 Uhr
Zitat von vitalis:
@LotPings deine Datei konnte ich nicht testen hat nicht funktioniert bevor ich zum Fehler komme hier noch eine Kleinigkeit, die
Ziel- und Quelldatei befinden sich unter d:\Neuer Ordner\Quelle.txt und d:\Neuer Ordner\“erste zeile der quelldatei“.txt (habe das Gefühl es ist wichtig).
Es ist wichtig, wenn sich die Batchdatei nicht im gleichen Ordner befindet.
Ansonsten hat es hier mit Testdaten (hab mir extra eine Batch zum generieren geschrieben) funktioniert.

Nachdem ich festgestellt habe das die Datei nicht funktioniert habe ich zwischen den einzelnen Befehlen eine pause eingebaut und
folgendes ist dabei raus gekommen:
Ich habe oben einen Befehl zum Wechsel ins Verzeichnis eingesetzt am Besten, noch mal von dort komplett übernehmen.

Hier der Testdatengenerator:
01.
@Echo off 
02.
PushD "D:\Neuer Ordner" 
03.
Set AnzNeue=5 
04.
Set AnzAlte=10 
05.
Set Out="Quelle.txt" 
06.
Set In="EURUSD - 4 Stunden.txt" 
07.
 
08.
:: Schreibe Header 
09.
 >%Out% Echo EURUSD - 4 Stunden 
10.
>>%Out% ECHO. 
11.
>>%Out% ECHO.High 
12.
 
13.
:: Ermittle Zeilenzahl 
14.
For /f %%A in ('find /V /C "" ^<%In%') Do Set InCnt=%%A 
15.
Set /A Skip=%InCnt% - %AnzAlte% 
16.
 
17.
:: Übernehme vorhandene 
18.
For /F %%A in ('More +%SKip% %In%') Do (Echo.%%A;)>>%Out% 
19.
 
20.
Echo Anhängen 
21.
For /L %%A in (1,1,%AnzNeue%) Do Call :AppRand 
22.
PopD 
23.
Goto :Eof 
24.
 
25.
:AppRand 
26.
Set /A Kurs="%Random% %% 9999" 
27.
Set Kurs=0000%Kurs% 
28.
Echo.1.%Kurs:~-4%; 
29.
1>>%Out% Echo.1.%Kurs:~-4%; 
30.
Goto :Eof
Gruß
Lotpings
Bitte warten ..
Mitglied: bastla
03.05.2010 um 17:32 Uhr
Hallo Vitali!

Nach den folgenden Änderungen (wobei die erste nur eine Sicherheitsmaßnahme darstellt, indem der Vergleich auf die ganze Zeile ausgedehnt wird, was aber bei Zahlen mit durchgängig gleicher Stellenanzahl de facto ohnehin erfolgt) könnte das besser gehen:

Ersetze die Zeile 55 durch:
for /f "delims=:" %%i in ('findstr /n /x "%Erste%" "%Quelle%"') do if not defined Fertig call :ProcessBlock %%i
und füge zwischen den Zeilen 86 und 87 ein:
set /a Ab+=5
Hintergrund dieser Ergänzung: Es wird zwar der 5-Zeilen-Block in "quelle.txt" gefunden, aber dann nicht übersprungen, sondern (wie Du schon gemerkt hast ) in die Zieldatei "mitgenommen" - daher muss die Startadresse für die zu übertragenden Zeilen entsprechend erhöht werden ...

Grüße
bastla
Bitte warten ..
Mitglied: vitalis
03.05.2010 um 22:09 Uhr
Hallo Leute

Wir nähren uns dem ende, beide Dateien laufen Perfekt genau so wie ich es haben will dafür Herzlichen Dank ihr habt einem alten Mann jede menge graue Haare erspart. Noch ein paar abschließende Worte.

@bastla hätte ich gewusst das man alle schritte erledigen kann ohne die Quelldatei zu verunstalten (Semikolon und die letzte Zeile vorher zu löschen) so wie im Beispiel von LotPings hättest du dir einige Minuten und Zeilen sparen können. Sorry.

@LotPings deine Datei hat von Anfang an funktioniert habe es zufällig herausgefunden das deine Version an bestimmte Parameter gebunden ist und zwar Zahl-Punkt-Zahl da ich die Daten aber mit ganzen Zahlen getestet habe (1 2 3 4 5 6 usw.) war es nachhinein klar, auch wenn die Daten im gleichen Ordner lagen, warum es nicht funktioniert hat. Ich schaue mir den Code zwar an aber alles was ich sehe ist bla,bla,bla es ist furchtbar, naja wie heißt es doch so schön „was man nicht im Kopf hat, hat man in den Füßen“. Noch mal Herzlichen Dank ihr habt mit sehr geholfen. Aufgabe erfüllt, Beitrag geschlossen.

Mit freundlichen Grüßen Vitali.
Bitte warten ..
Mitglied: LotPings
04.05.2010 um 00:44 Uhr
Zitat von vitalis:
@bastla hätte ich gewusst das man alle schritte erledigen kann ohne die Quelldatei zu verunstalten (Semikolon und die letzte
Zeile vorher zu löschen) so wie im Beispiel von LotPings hättest du dir einige Minuten und Zeilen sparen können.
Sorry.
Konnte er ja nicht, mein Ansatz wurde wenige Minuten nach seinem eingestellt.
Und wir haben beide einiges an Gehirnschmalz investieren müssen.
Ich kann, glaube ich, für uns Beide sprechen, wenn ich sage das wir das nur tun, wenn uns ein Problem interessiert; wir selber dabei etwas lernen.

@LotPings deine Datei hat von Anfang an funktioniert habe es zufällig herausgefunden das deine Version an bestimmte Parameter
gebunden ist und zwar Zahl-Punkt-Zahl da ich die Daten aber mit ganzen Zahlen getestet habe (1 2 3 4 5 6 usw.) war es nachhinein
klar, auch wenn die Daten im gleichen Ordner lagen, warum es nicht funktioniert hat.
Ich habe deine Vorgaben halt wörtlich genommen

Ich schaue mir den Code zwar an aber alles was ich sehe ist bla,bla,bla es ist furchtbar,
Ja, Biber mahnt öfter an (zu Recht) man möge besser dokumentieren.
Ich habe dabei das Problem, das mir der Blick auf den Code verloren geht, wenn zu viele Kommentarzeilen eingestreut sind
Noch mal Herzlichen Dank ihr habt mit sehr geholfen. Aufgabe erfüllt, Beitrag geschlossen.
Dank auch an dich fürs Feedback, das leider nicht immer selbstverständlich ist.

Gruß
LotPings
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Google Android
Textdatei auf SD Karte auslesen funktioniert nicht (Oneplus One) (4)

Frage von lordzwieback zum Thema Google Android ...

Batch & Shell
Text in neue 1. Zeile in Textdatei einfügen (4)

Frage von FuxxLi zum Thema Batch & Shell ...

Batch & Shell
Per Batch Textdatei Spaltenweise auslesen nochmal weil ich dumm bin (9)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...