[S] Kleiner Programmierauftrag für 25€

OP #1501138
Lesenswert?
• ▲
▼
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
#1501148
Lesenswert?
• ▲
▼
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.
#1501447
Lesenswert?
• ▲
▼
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
OP #1501590
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
#1501626
Lesenswert?
• ▲
▼
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
Gast #1501752
Lesenswert?
• ▲
▼
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.
#1501781
Lesenswert?
• ▲
▼
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 ´
Gast #1501819
Lesenswert?
• ▲
▼
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
Gast #1501896
Lesenswert?
• ▲
▼
>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 :-)
#1501932
Lesenswert?
• ▲
▼
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...
Gast #1502000
Lesenswert?
• ▲
▼
@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
Gast #1502053
Lesenswert?
• ▲
▼
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.
#1502336
Lesenswert?
• ▲
▼
> **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.
Angehängte Dateien:
Gast #1502370
Lesenswert?
• ▲
▼
@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.
OP #1502864
Lesenswert?
• ▲
▼
@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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren