Markierte Sourcecode Segemente automatisch extrahieren

Gast #718875
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
Gast #719105
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!
#719125
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.
Gast #719157
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 ...).
Admin Persönliche Seite #719224
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:
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
Gast #719231
Lesenswert?

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 ;-)
Gast #719274
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.
Gast #719284
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

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