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

Abgehackte Datenzeilen

Frage Entwicklung Batch & Shell

Mitglied: wtaler

wtaler (Level 1) - Jetzt verbinden

12.06.2010, aktualisiert 11:56 Uhr, 3529 Aufrufe, 18 Kommentare

Ich habe einen funktionierenden Batchscript. Jedoch das Problem, dass die Maschinenmeldung abgehackt übertragen werden und dann nicht auswertbar sind. Wer kann mir helfen?

Guten Morgen,

der nachstehende Batchscript funktioniert sehr gut, so lange die Maschinenmeldung über die Funkmodule komplett übertragen werden. In der letzten Zeit habe ich aber häufig das Problem, dass die Meldungen
durch Übertragungsstörungen nur unvollständig übertragen werden. Wenn die Übertragung unvollständig ist, dann wird die Meldung maximal zweimal - innerhalb 20 Sekunden - wiederholt und es kommt vor, das erst die
dritte Meldung komplett auswertbar ist. Daher nun meine Frage, was kann ich tun, das %~3 im Filter ausgewertet und %3 in die Datei "mailinhalt" mit dem vollständigem Text eingetragen wird? Die Datei a*.txt ist ein Hinweis
zum Fehlertext und beinhaltet nur eine Ziffer. Diese Übertragung ist passend und eindeutig. %4 ist ein feststehender Text und funktioniert auch.

@echo off &setlocal
echo %~3|findstr /g:c:\filter.txt>null || goto weiter
chcp 1252
echo %4>>c:\subject.txt
echo %3>>c:\mailinhalt.txt
type c:\a*.txt>>c:\mailinhalt.txt
del c:\a*.txt
ping -n 8 localhost>nul
<hier beginnt der Mailversand, der auf funktioniert >
del c:\subject.txt
del c:\mailinhalt.txt
goto :eof
:weiter
del c:\a*.txt

Gruß

Christoph
Mitglied: LotPings
12.06.2010 um 11:49 Uhr
Hallo Christoph,

ich habe deinen Text jetzt 3 aml durchgelesen und weiß immer noch nicht was dein Problem und was du jetzt erwartest?

Entweder liegt es an mir oder du hast das Problem nicht ausreichend beschrieben
  • was steht in filter.txt ?
  • wellche exemplarischen %3 bekommst du ?

Gruß
LotPings
Bitte warten ..
Mitglied: wtaler
12.06.2010 um 12:19 Uhr
Ergänzung:

In der Datei filter.txt stehen die Worte:

Blech
Stanze1
Stanze 2
Programm968
Programm1268
und noch 20 weitere


Die Meldung aus %3 ist bei korrekter Übertragung

20100612030601 Blech - Stopa Lager - Platz 12 - Ist 0,7 kg - Soll1,8 kg

aber es kommt in den letzten Wochen folgende Übertragung für das Funknetzwerk an:

20100612030601Blech - Stokzwl
20100612030607Blech - Stopa Lager - Platz 12 - Ist 0,7 kg - Soll1,8 kg

oder

20100612030601Bl[ef)e
20100612030607B
20100612030616Blech - Stopa Lager - Platz 12 - Ist 0,7 kg - Soll1,8 kg

Aufgrund der Berfehlsbearbeitung "echo %~3|findstr /g:c:\filter.txt>null || goto weiter" gibt es keine oder eine Mailverarbeitung mit fehlerhaften Datensätzen.
Bitte warten ..
Mitglied: LotPings
12.06.2010 um 13:29 Uhr
Zitat von wtaler:
aber es kommt in den letzten Wochen folgende Übertragung für das Funknetzwerk an:

20100612030601Blech - Stokzwl
Aber deser unvollständige Eintrag würde deiner Prüfung doch standhalten?

Wäre es nicht sinnvoller die Striktur nach Länge Anzahl Elementen auf vollständigkeit zu testen?
20100612030607Blech - Stopa Lager - Platz 12 - Ist 0,7 kg - Soll1,8 kg
Am Anfang ein DatumUhrzeit String und
trennen an den " - " und prüfen ob in den Teilen jeweils Lager/Platz/Soll/Ist/kg vorkommt?

Gruß
LotPings
Bitte warten ..
Mitglied: wtaler
12.06.2010 um 13:35 Uhr
Hallo LotPings,

das wäre ein Vorschlag, aber es sind bis zu 500 unterschiedliche Medlungen und die Länge ist nicht immer gleich. Auch ist nicht in jeder Maschinenmeldung der Zeitstempel enthalten.

Gruß

Christoph
Bitte warten ..
Mitglied: rubberman
12.06.2010 um 13:56 Uhr
Hallo Christoph,
dass man aus Daten, wie

20100612030601Bl[ef)e
20100612030607B

das Wort Blech ganz sicher nicht wiedererkennen kann ist doch klar. Die Frage ist doch erst einmal
-Was soll mit solchen Daten überhaupt passieren?
-Gibt es andere Kriterien (zb Zeitstempel oder Mindestlänge des Datensatzes) nach denen eine (Vor-)Auswahl getroffen werden könnte?

Grüße
rubberman

PS: Eigentlich noch wichtiger ist die Frage: Was kannst du technisch tun, um das Verstümmeln der Datensätze in Zukunft zu vermeiden.
Bitte warten ..
Mitglied: wtaler
12.06.2010 um 14:51 Uhr
Hallo rubberman,

technisch kann ich nichts mehr tun, weil der zweite oder dritte Satz ja richtig kommt. Eigentlich würde ich gerne den verstümmelten Datensatz bei der Auswertung und bei der Füllung auslassen. Bei der Ausgabe der Maschinenmeldung kann ich noch ein Satzendezeichen mit [NULL] - also wirklich [NULL] geschrieben - mitgeben und das kommt dann bei abgehackten Meldungen nicht mit.

Gruß

Christoph
Bitte warten ..
Mitglied: pieh-ejdsch
12.06.2010 um 15:36 Uhr
Hi wtaler,

wenn Du die Zeile 2
01.
echo %~3|findstr /g:c:\filter.txt>null || goto weiter
folgendermaßen schreibst (ein Zusätzliches Leerzeichen nach dem ECHO):
01.
echo  %~3|findstr /g:c:\filter.txt>null || goto weiter
Und in Deine Filter.TXT an jedem Zeilenanfang ein Leerzeichen setzt (zB. mit dieser KommandoZeile)
01.
(for /f "tokens=*" %i in (c:\filter.txt) do echo  %i>>"%temp%\filter) &move /y "temp%\filter" c:\filter.txt
dann werden zumindest solche Zeilen:
20100612030607Blech - Stopa Lager - Platz 12 - Ist 0,7 kg - Soll1,8 kg
NICHT mitaufgenommen!

es kann natürlich sein, dass Du nach Zahlen in der "filter.txt" suchst. vllt sind diese der Übeltäter zB.:
006
diese gibt Dir auch eine Erfolgsmeldung vom FindStr aus
20100612030607

Gruß Phil
Bitte warten ..
Mitglied: wtaler
12.06.2010 um 16:22 Uhr
Hallo Phil,

danke für Deinen Ansatz. In der filter.txt sind keine Zahlen drin.

Das Stopalager gibt mir

20100612030601Bl[ef)e
20100612030607B
20100612030616Blech - Stopa Lager - Platz 12 - Ist 0,7 kg - Soll1,8 kg[NULL]

als Datensätze und die Stanzen produzieren folgende Daten:

Sta[17HG][FF][DC]
Stanze1 - Störung in Programm19654[NULL]

Ansonsten geht es mir eher um die Lösung, wie ich

20100612030601Bl[ef)e
20100612030607B

bei der Auswertung ingorieren und nicht in die Datei mailinhalt.txt bringen kann, so dass nur der Datensatz

20100612030616Blech - Stopa Lager - Platz 12 - Ist 0,7 kg - Soll1,8 kg[NULL]

oder

Stanze1 - Störung in Programm19654[NULL]

ausfiltern und in die mailinhalt.txt schreiben kann. Wichtig ist aber auch, dass die Inhalte von a*.txt in den Mailinhalt laufen und nicht verloren gehen.

Gruß

Christoph
Bitte warten ..
Mitglied: pieh-ejdsch
12.06.2010 um 18:02 Uhr
Hallo Christoph,

Dann mach doch wenn Du bei jeden GUTEN Datensatz am Zeilenende [NULL] stehen hast anstatt nach Blech laut der filter.txt zu suchen

01.
set "Zeile=%~3" 
02.
if not "%Zeile:~-6%" == "[NULL]" goto :weiter
oder sonst machst Du
01.
(echo %~3|findstr /g:c:\filter.txt>nul || echo %~3|findstr /e "NULL] DC]">nul)||goto :weiter
vllt ist Die Umleitung ins Bodenlose (>nul) schuld obwohl ja keine Befehlsverkettungszeichen in "3~%" stehen???
aber eine 2 am ende von echo "3~%" geht schonmal schief.....

was passiert denn mit
Sta[17HG][FF][DC]
kommt das auch in die Mail?

bei Zeile 3,4 und 5 kannst Du andersherum schreiben.
>>c:\subject.txt echo %4
>>c:\mailinhalt.txt echo %3
>>c:\mailinhalt.txt type c:\a*.txt

Gruß Phil
Bitte warten ..
Mitglied: wtaler
12.06.2010 um 18:16 Uhr
Hallo Phil,

danke für die Antwort.

Sta[17HG][FF][DC] soll ignoriert werden. Deinen Vorschlag werde ich morgen ausprobieren und mich dazu melden. Aber bei der Funktion :weiter werden die Zusatzinfoaus a*.txt auch gelöscht. Hast Du dafür noch einen Vorschlag?

Gruß

Christoph
Bitte warten ..
Mitglied: pieh-ejdsch
12.06.2010 um 23:25 Uhr
Hallo Christoph,

ich fasse es nochmal zusammen, so wie ich es Verstanden habe

  • Die Maschinen geben Meldungen aus, welche verwertbar sind oder Nicht verwertbar sind.
  • Ob eine Meldung verwertbar ist wird über den dritten Parameter der BatchDatei Abgefragt/Überprüft.
    • Eine Verwertbare MaschinenMeldung beinhaltet am Ende vom dritten Parameter ein [NULL]
    • Eine nicht verwertbare MaschinenMeldung wird nicht verabeitet/ge-mailt und die Batch wird beendet.
  • Wenn die MaschinenMeldung verwertbar ist.
    • Wird ein vierter Parameter in eine TextDatei subject.txt auf Laufwerk C:\ eingetragen,
    • Der dritte Parameter der MaschinenMeldung wird in eine mailinhalt.txt auf dem Laufwerk C:\ eingetragen,
    • Der Inhalt der/aller TextDatei(en) welche mit a beginnen und auf Laufwerk C:\ liegen werden in die mailinhalt.txt auf Laufwerk C:\ eingetragen.
    • Alle TextDatei(en) welche mit a beginnen und auf Laufwerk C:\ liegen werden gelöscht.
    • Die Mail wird versendet und subject.txt sowie mailinhalt.txt auf Laufwerk C:\ werden gelöscht.
  • Wenn die MaschinenMeldung Nicht verwertbar ist.
    • Alle TextDatei(en) welche mit a beginnen und auf Laufwerk C:\ liegen werden gelöscht.

wenn dem so ist würde die Batch so funktionieren:
01.
@echo off &setlocal 
02.
set "Zeile=%~3" 
03.
if not "%Zeile:~-6%" == "[NULL]" goto :weiter 
04.
chcp 1252 
05.
echo %4>>c:\subject.txt 
06.
echo %3>>c:\mailinhalt.txt 
07.
type c:\a*.txt>>c:\mailinhalt.txt 
08.
ping -n 8 localhost>nul  
09.
<hier beginnt der Mailversand, der auf funktioniert > 
10.
del c:\subject.txt 
11.
del c:\mailinhalt.txt  
12.
:weiter 
13.
del c:\a*.txt
da ja die Textdatei(en) beginnend mit a auf Laufwerk C:\ in beiden Szenarien gelöscht werden, kann dies auch zum Ende der Batch erfolgen.

Bitte fasse Deinen Code aus dem FrageBeitrag in Codetags.
(davor ein <code> und dahinter ein </code> setzen)

Gruß Phil
Bitte warten ..
Mitglied: wtaler
13.06.2010 um 12:59 Uhr
Hallo Phil,

ich habe die Programmierung ausgetestet und es kommt die Fehlermeldung

not Befehl fehlerhaft

und dann verschwindet die Batchbox.

Gruß

Christoph
Bitte warten ..
Mitglied: pieh-ejdsch
13.06.2010 um 14:41 Uhr
ups .....
da hat die Internet-Druckmaschine nicht richtig funktioniert!

ich hab den Fehler berichtigt in Zeile 03

irgendwie ist mir da if durch die Lappen gegangen.

Gruß Phil
Bitte warten ..
Mitglied: wtaler
13.06.2010 um 23:32 Uhr
Hallo Phill,

herzichen Dank für Deine Unterstützung, denn die Ausfilterung der abgehackten Datensätze funktioniert. Aber wie kann ich den Befehl

echo %~3|findstr /g:c:\filter.txt>null || goto weiter

in die IF-Abfrage einbauen, damit danach nur die gewünschten Datensätze aus der Filterdatei übertragen werden. Im Moment wird auch jeder Datensatz
aus den Maschinen und Lager übertragen, auch wenn unwichtige Informationen sind.

Weiterhin habe ich noch die Frage wie der Code lauten muss, dass die Dateien a*.txt nicht gelöscht werden, wenn der Befehl

if not "%Zeile:~-6%" == "[NULL]" goto :weiter

angesprochen wird, da ich die a*.txt noch für die Befehlszeile

type c:\a*.txt>>c:\mailinhalt.txt

benötige.

Viele Grüße

Christoph
Bitte warten ..
Mitglied: pieh-ejdsch
14.06.2010 um 00:51 Uhr
... Aber wie kann ich den Befehl
echo %~3|findstr /g:c:\filter.txt>null || goto weiter
in die IF-Abfrage einbauen ...
einfach nach der dritten Zeile Einfügen
achso: nul mit nur einem L

01.
@echo off &setlocal 
02.
set "Zeile=%~3" 
03.
if not "%Zeile:~-6%" == "[NULL]" goto :weiter 
04.
echo %~3|findstr /g:c:\filter.txt>nul || goto :weiter 
05.
chcp 1252 
06.
echo %4>>c:\subject.txt 
07.
echo %3>>c:\mailinhalt.txt 
08.
type c:\a*.txt>>c:\mailinhalt.txt 
09.
ping -n 8 localhost>nul  
10.
<hier beginnt der Mailversand, der auf funktioniert > 
11.
del c:\subject.txt 
12.
del c:\mailinhalt.txt  
13.
del c:\a*.txt 
14.
:weiter
... dass die Dateien a*.txt nicht gelöscht werden, wenn der Befehl
if not "%Zeile:~-6%" == "[NULL]" goto :weiter ...
Es wird doch erst a*.txt in mailinhalt.txt geschrieben und danach erst gelöscht!

ich dachte die a*.txt würden nur in die Mail geschrieben werden, wenn das ganze gedöns Brauchbar ist.
laut Deiner 1. Batch wird das doch auch gelöscht: einmal nach eintrag in mailinhalt.txt und als Alternative wenn die Meldungen aus %~3 Abfall ist (nach :weiter)

Verwirrt mich jetzt doch ein bisschen wann soll denn nun die a*.txt gelöscht werden
Vllt erklärst Du nochmal genau was die Batch wann machen soll Klammer-auf so wie ich Hier mit Stichpunkten Klammer-zu

Gruß Phil
Bitte warten ..
Mitglied: wtaler
14.06.2010 um 08:22 Uhr
Giuten Morgen Phil,

bei der Batch soll folgendes passieren:

01.@echo off &setlocal
02.set "Zeile=%~3"
03.if not "%Zeile:~-6%" == "[NULL]" goto :weiter (Hier soll der abgehackte Text nicht in die Datei Mailinhalt.txt geschrieben werden, weil der abgehackte Datensatz nach wenigen Sekunden noch mal von der Maschine übertragen wird. Zusätzlich zu den Maschinenmeldungen werden noch Statusmeldungen, wei F2 oder Z4 oder AB1 in separaten Dateien übertragen, die a1.txt, a2.txt usw. lauten und bei der abgehacktenMaschinenmeldung natürlich nicht gelöscht werden dürfen.)
04.echo %~3|findstr /g:c:\filter.txt>nul || goto :weiter (In dieser Zeile sollen nur die Fehlermeldungen aus den vollständigen Maschinenmeldungen ausgefiltert werden, damit die Meldungen, wie Maschine - 22.00 Uhr abgeschaltet etc - nicht als Mail versendet wird - aber von der Maschine als Meldung erstellt wird. Somit werden beim nicht zutreffen des Filters auch die a*.txt gelöscht.

Nun noch eine Frage - in 03 steht if not "%Zeile:~-6%" == "[NULL]" goto :weiter und prüft die letzten sechs Zeichen ab. Wenn ich :~-6 heraus lösche, dann sollte die ganze Zeile nach [NULL] geprüft werden oder?:

Herzlichen Dank für Deine Hilfestellungen.

Viele Grüße

Christoph
Bitte warten ..
Mitglied: pieh-ejdsch
14.06.2010 um 11:44 Uhr
Moin Christoph,

"%Zeile:~-6%"
~= Zeige mir nur die Anzahl Zeichen der Variable Zeile
- = zähle von hinten nach vorn
6= zähle sechs Zeichen ab

steht also für: zeige die letzten sechs Zeichen der Variable Zeile

hier ist nochmal Dein geänderter Batch
01.
@echo off &setlocal 
02.
set "Zeile=%~3" 
03.
::in der naechsten Zeile wird auf eine Vollstaendige MaschinenMeldung geprueft 
04.
::wenn die letzten 6 Zeichen der Meldung nicht [NULL] sind, wird nur die Batch beendet (a*.txt bleiben erhalten). 
05.
if not "%Zeile:~-6%" == "[NULL]" goto :eof 
06.
::in der naechsten Zeile wird die Vollstaendige MaschinenMeldung auf Uebereinstimmung von Zeichenfolgen aus der filter.txt geprueft 
07.
::wenn keine Zeichenfolge der filter.txt in der Meldung vorkommt, wird zur Sprungmarke :Weiter gegangen. 
08.
echo %~3|findstr /g:c:\filter.txt>nul || goto :weiter 
09.
chcp 1252 
10.
echo %4>>c:\subject.txt 
11.
echo %3>>c:\mailinhalt.txt 
12.
type c:\a*.txt>>c:\mailinhalt.txt 
13.
ping -n 8 localhost>nul  
14.
<hier beginnt der Mailversand, der auf funktioniert > 
15.
del c:\subject.txt 
16.
del c:\mailinhalt.txt  
17.
:weiter 
18.
::Nur wenn - 
19.
::A: die Meldung keine Zeichenfolge aus der filter.txt beinhaltet hat, wird a*.txt geloescht! 
20.
::B: es zum Versandt der Mail kam, wird a*.txt geloescht! 
21.
del c:\a*.txt
Gruß Phil
Bitte warten ..
Mitglied: wtaler
14.06.2010 um 13:03 Uhr
Herzlichen Dank, das Problem ist gelöst. Gruß Christoph
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

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

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

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

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...