mikrocontroller.net

Forum: PC-Programmierung Markierte Sourcecode Segemente automatisch extrahieren


Autor: Weinga-Unity (Gast)
Datum:

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

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Weinga-Unity (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Weinga-Unity (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Weinga-Unity (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
#!/usr/bin/env ruby

ARGV.each do |source|
  File.read(source).scan(/#BEGINEXPORT: (.*?)\n(.*?)#ENDEXPORT/m) do |filename, text|
    # Kommentarzeichen entfernen
    text.gsub!(/^(;|#|\/\/) ?/, '')
    File.open(filename.strip, 'w+') do |f|
      f.write text
    end
  end
end

Aufruf:
extract.rb *.asm

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch Sed war schon mal ein guter Hinweis. Folgender Aufruf sollte
ungefähr das tun, was du dir vorstellst.
  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:
 Test.asm ist er ASM-Source für einen ATMega8

  Schaltung per ASCII gemalt
  .....
  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 ;-)

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und noch nebenbei ist sed blitzartig schnell...

Autor: Weinga-Unity (Gast)
Datum:

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

Autor: Weinga-Unity (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.