Hallo an die Programmierprofis, ein Datenprotokoll (ASCII-Werte mit Trennzeichen, Dateilänge variert von 1-20 MB) enthält fehlerhafte Datensätze die lediglich entfernt werden sollen indem die richtigen einfach nacheinander in eine neue Datei gespeichert werden. Dafür würde sich ein kleines Programm anbieten, da die manuelle Entfernung in einem Texteditor natürlich wenig erbaulich ist. Es würde auf folgenden Algorithmus hinauslaufen: a ) Erste Zeile bis zur Zeilenschaltung 0D/0A einlesen, Datensatz=Zeilenlänge bestimmen und Zeile in neue Datei speichern b) Loop bis zum Dateiende: Nächste Zeile einlesen, WENN 0D/0A nicht an gleicher Position am Datensatzende wie in Zeile 1 stehen ODER in der Datensatzzeile "verbotene" Zeichen festgestellt werden (alles <20H außer 09, dem Trennzeichen zwischen einzelnen Werten) DANN Zeile verwerfen SONST der neuen Datei anfügen. Alle Datensätze in einem Protokoll haben stets die gleiche absolute Länge. Um mir Erweiterungen offen zu halten könnte sie in zukünftigen Protokollversionen ansteigen- deshalb kurz die Bestimmung in Zeile 1. Im Prinzip reicht ein kleines Windows Kommandozeilen-Tool das die Daten aus seinem Verzeichnis liest und wieder dorthin abspeichert. Gerne auch inklusive GUI zur Verzeichnis/Dateiauswahl. Das alles sollte bei entsprechender Kenntnis keine zeitaufwendige Sache sein. Programmiersprache ist frei wählbar! Wer sich für den gebotenen Betrag dazu in der Lage sieht bitte kurze E-Mail an mich! Gruß Dennis
Die GUI kannst du dir sparen, wenn das Tool einfach alle seine Argumente als Dateinamen zum konvertieren nimmt. Dadurch kann man das als "Senden an..." installieren und einfach aufrufen, indem im Explorer die Dateien markiert werden und mit rechter Maustaste dann über Senden an... das Tool angewählt wird.
Ja gute Idee. Wie es konkret realisiert wird ist mir letztlich egal solange das Tool seinen Zweck erfüllt. Kann alles möglichst einfach gehalten werden. Dennis
@Ben_ Soll unter WinXP (Kommandozeile reicht) lauffähig sein, Dateinamen meinetwegen auch fest vorgegeben. Dennis
könnte ich machen, sollte nicht das große problem sein. wann brauchst das?
bräuchte dann aber mal eine kurze testdatei, vielleicht auch mit ein paar fehlern drin.
Mal schnell in ner schlaflosen Nacht Grundlagen von awk gelernt ;) Sollte funktionieren soweit... awk gibts auch für Windows Nach Installation in Konsole: (in einer Zeile) awk -v BINMODE="rw" -v RS="\r\n" -v ORS="\r\n" 'NR==1 { laenge=length($0); print($0) } NR>1 && length($0)==laenge && !/[\000-\010\012-\037]/' input.txt > output.txt kurze Beschreibung: BINMODE, RS, ORS setzt das Zeilenende auf Windows, \r\n im Falle Zeile 1 merkt er sich die Zeilenlänge und gibt die erste Zeile aus Ab Zeile 2 prüfen ob aktuelle Länge = Länge Zeile 1 bzw ungültiges Zeichen (als Oktalzahlen) Gute Nacht, Benjamin
Danke Benjamin, klingt nach super Tipp. Habe sogleich drei verschiedene AWK Inkarnationen drauf angesetzt und leider bislang nur Fehlermeldungen erhalten, siehe Bild. Sorry dass mir Zeit und Faible fürs tiefere Verständnis fehlen- ich suche deshalb nur die Fertiglösung. Gruß Dennis
häng mal eine testdatei an...1x ohne, 1x mit Fehlern dann kann man das besser abschätzen...
OK bitte. Ich hoffe aus dem kleinen Ausschnitt einer Protokolldatei wird klar um was es geht!
oki bin raus, werd mir die arbeit nicht umsonst machen - dafür ist mir meine zeit zu schade. und viele köche verderben den brei. @threadstarter: du solltest dir einen suchen der dir ein brauchbares ergebnis liefern kann und dich dann nicht von anderen mit ewigen verbesserungsvorschlägen breitschlagen lassen, sonst wird das nämlich nie fertig. cu
Ich bin ja mal gespannt ob sich das jmd. für 25€ antut. 25€ entspricht 1,5h für einen Schüler/Studenten. Aber ein erfahrener Programmierer dürfte schon diese Zeit benötigen, dazu kommt noch Korrespondenz und Geld eintreiben.
Dennis S. schrieb: > Danke Benjamin, klingt nach super Tipp. Habe sogleich drei verschiedene > AWK Inkarnationen drauf angesetzt und leider bislang nur Fehlermeldungen > erhalten, siehe Bild. Sorry dass mir Zeit und Faible fürs tiefere > Verständnis fehlen- ich suche deshalb nur die Fertiglösung. Der Fääähler: 2 Zeichen vor dem Ausdruck input.txt Immer das Gleiche bei den Tastaturen, was denn nun für ein Hochkomma : ` oder ´
Hallo, sorry Ben, wollte dich nicht verärgern oder dir dein Geschäft vermiesen, ich hatte den Thread im Browser wohl gestern Abend früh schon geöffnet, da gabs noch 0 Antworten. War für mich eher eine Interessante Sache um mich mal in awk reinzulesen... Zu deinem awk unter Windows-Problem... awk -v BINMODE=3 -v RS="\r\n" -v ORS="\r\n" "NR==1{laenge=length($0);print($0)}NR>1&&length($0)==laenge&&!/[\x00-\x0 8\x10-\x1F]/" input.txt > output.txt das könnte klappen, Fehler waren die Hochkommas unter Windows denke ich mal, aber nicht im Detail getestet Grüße Benjamin
>Ich bin ja mal gespannt ob sich das jmd. für 25€ antut.
Ich finde viel spannender, ob jemand auf die 25 € verzichtet, um zeigen
zu können, dass für ihn das Schreiben dieses Programms eine derart
banale Aufgabe ist, dass er das ritterlich nebenbei und umsonst erledigt
und das Prog hier gratis reinstellt. So dies ja sogar schon ansatzweise
geschehen ist :-)
hehe so sehe ich das auch, ich hätte es für die 25 eus in assembler gemacht um mit einer win32 .exe unter 2kb zu kommen **g**. mit "umsonst machen" heißt das ichs hinterher wegschmeißen kann weils keiner nutzt. 25 euronen dafür sind auch kein geschäft was man mir vermiesen könnte. das ist kein anreiz es überhaupt zu machen. böse zungen würden sagen dreimal aufs gas gelatscht und schon sind die hinten aus'm auspuff rausgeflogen...
@Timo Nicht schlecht. Wenn Du nach dem Einlesen einer Zeile noch die führenden Leerzeichen löscht kannst Du sogar eine Zeile mehr "retten". Ich weiß, stand so nicht im Lastenheft ;-) Mit freundlichen Grüßen Guido
So das ganze is fertig, als exe.. geschrieen in java.. mit Kaffeepause ca 1,5h Usage: textck [file] => speichert foo.txt unter foo_checked.txt
**rofl** 418 KILOBYTE für so ein programm. DAS ist die eigentlich reife leistung da dran... genau das hätte ich vermeiden wollen. aber egal, wozu gibts denn 500Gb platten, immer voll damit...
Also mal ganz ehrlich. Ich vertraue hier niemanden so sehr um eine .exe Datei auszuprobieren. Das kann ja ein Virus sein. Und nachher ist die ganze Platte im Ar***. @U. K. Welches Tool macht aus Java Dateien .exe. Das hätte ich auch gerne mal.
ich würd sie von keinem nehmen, der sich "rauchendes dope" nennt. und wenn er 5 mal so angemeldet ist, wie ich...
mki schrieb: > @U. K. Welches Tool macht aus Java Dateien .exe. Das hätte ich auch > gerne mal. JSmooth kann sowas z.B. auch wenn es immernoch eine JRE benötigt.
> **rofl** 418 KILOBYTE für so ein programm. DAS ist die eigentlich > reife leistung da dran... genau das hätte ich vermeiden wollen. aber > egal, wozu gibts denn 500Gb platten, immer voll damit... Für die Dateigröße kann ich nichts, ist von JSmooth die jar hat 3,4kB. Aber mich hat es auch gewundert als ich die Dateigröße gesehen habe. > JSmooth kann sowas z.B. auch wenn es immernoch eine JRE benötigt. Ja genau das habe ich benutzt. Als Linuxjünger tut es normalerweise ein Zeile als Bashscript damit man sich das java -jar sparen kann. > Also mal ganz ehrlich. Ich vertraue hier niemanden so sehr um eine .exe > Datei auszuprobieren. Das kann ja ein Virus sein. Und nachher ist die > ganze Platte im Ar***. Guter Einwand. Ich hänge den Source an. Ist nicht kommentiert aber das sollte nicht stören wenn man es nur compiliert. Ich compiliere auch immer lieber selbst als fertige .exe zu verwenden. Aber es wurde ja nach einem fertigen Programm gefragt, nicht nach den Sourcen. >ich würd sie von keinem nehmen, der sich "rauchendes dope" nennt. Der Nick kommt noch aus der Zeit als ich 13 war und das Internet entdeckt habe. War mein erster Nick. Ich habe ihn noch immer auch wenn ich jetzt Dogen gegenüber eine andere Einstellung habe.
@U. K. : ich möchte jetzt niemanden etwas unterstellen aber meinst du unser Auftraggeber versteht was du geschrieben hast wenn er dieses Programm als Auftrag raus gibt anstatt es selbst zu schreiben.
Hallo Dennis, was ist aber wenn schon in der ersten Zeile Müll steht? Deine Textdatei sieht nach einer festen Datensatzlänge/Zeilenlänge aus. Ist das richtig? Ciao Hans
hmmm... package textprüfer; Umlaute sind ungünstig im Quellcode.. nur mal so als Hinweis...
@Hans die Datensatzlänge ist stets fest, unabhängig vom (fehlerhaften) Inhalt. Die erste Zeile war bislang immer richtig. Unabhängig davon schaue ich mir das Protokoll kurz vorab in einem Texteditor an und könnte notfalls korrigieren. @Alle OK sei es wie es sei, der Auftrag ist bereits vergeben. Das ging leider nur ein Mal, deshalb bitte ich um Verständnis bei allen, die mir hier zum Teil schon fertige Lösungen anboten. Danke für die hilfreichen Beiträge!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.