www.mikrocontroller.net

Forum: Markt [S] Kleiner Programmierauftrag für 25€


Autor: Dennis S. (dspo)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
windoofs? feste dateinamen? kommandozeile reicht?

Autor: Dennis S. (dspo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Dennis S. (dspo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ben_
Soll unter WinXP (Kommandozeile reicht) lauffähig sein, Dateinamen 
meinetwegen auch fest vorgegeben.

Dennis

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
könnte ich machen, sollte nicht das große problem sein. wann brauchst 
das?

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bräuchte dann aber mal eine kurze testdatei, vielleicht auch mit ein 
paar fehlern drin.

Autor: Benjamin Schmidt (demonk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis S. (dspo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
häng mal eine testdatei an...1x ohne, 1x mit Fehlern

dann kann man das besser abschätzen...

Autor: Dennis S. (dspo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
OK bitte. Ich hoffe aus dem kleinen Ausschnitt einer Protokolldatei wird 
klar um was es geht!

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Esko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andrew Taylor (marsufant)
Datum:

Bewertung
0 lesenswert
nicht 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 ´

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Timo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

mit Excel bzw. VBA (siehe Anhang).

Gruß. Timo

Autor: Hans Mayer (hansilein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für 50€ mach ichs

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: U. K. (rauchendesdope)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: mki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich würd sie von keinem nehmen, der sich "rauchendes dope" nennt.
und wenn er 5 mal so angemeldet ist, wie ich...

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: mki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Läubi ..: Na gut ok kannte ich noch nicht.

Autor: U. K. (rauchendesdope)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: mki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans Fanic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm...

package textprüfer;

Umlaute sind ungünstig im Quellcode.. nur mal so als Hinweis...

Autor: Dennis S. (dspo)
Datum:

Bewertung
0 lesenswert
nicht 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!

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, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Yahoo-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.