Forum: PC-Programmierung Markierte Sourcecode Segemente automatisch extrahieren


von Weinga-Unity (Gast)


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

von Kai G. (runtimeterror)


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

von Weinga-Unity (Gast)


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.

von Karl H. (kbuchegg)


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.

von Weinga-Unity (Gast)


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!

von Karl H. (kbuchegg)


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.

von Weinga-Unity (Gast)


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 ...).

von Andreas S. (andreas) (Admin) Benutzerseite


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

von yalu (Gast)


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 ;-)

von Uhu U. (uhu)


Lesenswert?

Und noch nebenbei ist sed blitzartig schnell...

von Weinga-Unity (Gast)


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.

von Weinga-Unity (Gast)


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.

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
Noch kein Account? Hier anmelden.