Hallo! Ich benötige ein Programm (Commandline reicht), das aus folgender Sourcedatei ================================================================ ;#BEGINEXPORT: test_description.txt ; Test.asm ist er ASM-Source für einen ATMega8 ; ; Schaltung per ASCII gemalt ; ..... ; usw. ;#ENDEXPORT LDI i,0 CPI i,0 ... ================================================================ automatisch die zwischen BEGINEXPORT und ENDEXPORT angeführten Zeilen in die test_description.txt Datei extrahiert. Optional sollte man über eine INI-File Einstellungen wie z.B. die Commentzeichen eingeben können. Batch-Funktion (D.h. alle Dateien eines Ordners behandeln) wäre auch ganz nett. Natürlich könnte ich das auch selbst implementieren, befürchte aber dass es etwas komplexer wird das ganze etwas universeller zu machen (UNIX-DOS Linebreak kompatibel, für alle Programmiersprachen/Comments anpassbar, ...). Internetrecherchen haben nichts ergeben (hab aber auch keinen ordentlichen Suchbegriff dafür gefunden). Vielleicht kennt jemand von euch ein Programm, das sowas macht. mfg Weichinger Klaus
Ich würde einfach einen regulären Ausdruck in einer Sprache deiner Wahl formulieren und auf die Datei loslassen: http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck Sollte nicht allzu schwer sein. Gruß Kai
Danke für dein Feedback. Wo ich aber wieder selber implementieren müsste. Ich kann mir nicht vorstellen, dass es da nicht schon was fertiges gibt. mfg W.K.
Mit einem Stream-Editor ala 'sed' oder 'awk' muesste sowas machbar sein. Ist aber schon lange her, dass ich sowas das letzte mal benutzt habe.
@Karl heinz Buchegger awk hab ich mir auch schon gedacht für den Fall, dass ich das Programm selber implementieren muss. Wobei ich wieder beim "selber Progn" angelangt wäre. Falls jemand noch irgend welche Ideen hat, her damit!
> Falls jemand noch irgend welche Ideen hat, her damit!
Wie hättest dus denn gerne?
Darf das Tool die Schlüsselwörter von einer Datei lesen
oder ist das dann auch schon zuviel Aufwand.
Noch billiger als mit sed oder awk wirst dus nicht kriegen.
Wenn mein Chef damit umgehen konnte, dann kann das jeder.
Wie gesagt, ich kann mir nicht vorstellen, dass es das nicht schon fertig gibt. Selber ausprogrammieren kann ich's sicher, nur würde es 1-2 Woche dauern, bis alles so aufbereitet ist, dass man es auch wirklich verwenden kann (Doku, WIN+UNIX, konfigurierbar für alle Sprachen die Kommentare erlauben, Batchfunktionen, Tests, vielleicht sogar noch GUI mit FLTK ...).
Es gibt Dokumentations-Tools wie doxygen, die funktionieren ähnlich. Für genau deine Anwendung gibt es sicher nichts fertiges, aber das geht doch in jeder Skriptsprache mit ein paar Zeilen (Ruby/Perl/Python, mit Urtieren wie sh, awk und sed muss man sich heutzutage wirklich nicht mehr rumärgern). extract.rb:
1 | #!/usr/bin/env ruby
|
2 | |
3 | ARGV.each do |source| |
4 | File.read(source).scan(/#BEGINEXPORT: (.*?)\n(.*?)#ENDEXPORT/m) do |filename, text| |
5 | # Kommentarzeichen entfernen
|
6 | text.gsub!(/^(;|#|\/\/) ?/, '') |
7 | File.open(filename.strip, 'w+') do |f| |
8 | f.write text |
9 | end
|
10 | end
|
11 | end
|
Aufruf:
1 | extract.rb *.asm |
Auch Sed war schon mal ein guter Hinweis. Folgender Aufruf sollte ungefähr das tun, was du dir vorstellst.
1 | sed -ne '/#BEGINEXPORT/,/#ENDEXPORT/{/#\(BEGIN\|END\)EXPORT/d;s/^;//;p}' datei1 datei2 >test_description.txt |
Er sucht nach Textblöcken, die von Zeilen mit "#BEGINEXPORT" und "#ENDEXPORT" begrenzt werden, löscht diese Begrenzungszeilen und in jeder verbleibenden Zeile das erste Zeichen, falls es ein ";" ist. Das gefilterte Ergebnis für alle Eingabedateien wird in /test_description.txt/ geschrieben. Für deinen Beispieltext von oben wird folgendes Ergebnis geliefert:
1 | Test.asm ist er ASM-Source für einen ATMega8 |
2 | |
3 | Schaltung per ASCII gemalt |
4 | ..... |
5 | usw. |
datei1 datei2 ist die Liste der Dateien, die bearbeitet werden sollen. Je nach verwendeter Shell oder Sed-Variante können auch Wildcards (*, ? usw.) verwendet werden. Ich bin auch nicht der wirkliche Sed-Profi, deswegen möge man mir verzeihen, wenn die Lösung nicht die kürzeste ist ;-)
Und noch nebenbei ist sed blitzartig schnell...
Die Sache hat jetzt doch ein gutes Ende genommen. Mir ging es darum, die Dokumentationen in .ASM Files (also Kommentare am Beginn des Files; ASCII-Schaltungen, Registerbeschreibungen) direkt in ein LaTeX File mit den Listingspackage einzubinden. Da hab ich mir gedacht, ein Tool müsste diese Kommentare extrahieren und mit den Listingspackage für LaTeX kann ich dann diese direkt einbinden. Ich wusste zwar, dass man mit dem Listingspackage angeben konnte Beginzeilennummer-Endzeilennummer, aber das reichte mir nicht. Jetzt hab ich mir dir Listingsdoku listings-1.3.dvi noch mal durchgelesen und ich wurde fündig im Kapitel 5.4 (Seite 49). Da wird genau das beschrieben das ich haben wollte. Jetzt brauch ich nicht mal mehr ein Tool sondern kann direkt die Sourcefiles verarbeiten -> immer aktuelle Dokumentation :) Wollte hier das noch melden. Vielleicht kanns der eine oder andere von euch brauchen. mfg W.K.
@ Andreas Schwarz und yalu: Ich danke für eure Beiträge. Eure Lösungen entfernen anscheinend auch noch das Commentzeichen am Anfang (was LaTeX+Listings leider nicht macht). Somit wären dies auch noch dazu geeignet direkt die Kommentare in .tex Dateien zu exportieren was auch wieder Vorzüge hätte.
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.