BlackBoard » Design, Programmierung & Entwicklung » Programmieren » [Bash] C-Kommentare entfernen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen [Bash] C-Kommentare entfernen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Misel Misel ist männlich
Hüter des Kitkat


images/avatars/avatar-2084.png

Dabei seit: 02.11.2002
Beiträge: 1.203
Herkunft: live://home.berlin.d e

[Bash] C-Kommentare entfernen       Zum Anfang der Seite springen

Update: Fehler ist behoben. Es war nicht das "echo" daran Schuld, sondern das "for". Wenn das /* sieht interpretiert es das als Dateinamen-Wildcard.


hier nochmal der Korrekte Code
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
#!/bin/sh
removing_comments="0"; # arbeitsstatus

#erstmal alles außer dem Kopf der Datei nehmen und Leertasten und Tabs maskieren (sind Trennzeichen für "for")
for k in `cat "${1}" | sed -e 's/\//%22/' | sed -e 's/ /%20/g' | sed -e 's/\t/%21/g'`;
do
	#echo $removing_comments
	k=`echo "$k" | sed -e 's/%21/\t/g'| sed -e 's/%20/ /g' | sed -e 's/%22/\//'`
	if [[ "$removing_comments" == "0" ]]
	then
		# wir prüfen fpr jede Zeile, ob ein Kommentar beginnt
		comment=`echo "$k " | grep '/\*'`
		if [[ "X" == "X$comment" ]]
		then	#wenn comment leer ist > Kein Kommentar, einfache Ausgabe
			echo "$k"
		else
			#wenn comment nicht leer, dann
			#schauen wir noch, ob der Kommentar in derselben Zeile aufhört
			comment=`echo "$k" | grep '\*/'`
			if [[ "X" == "X$comment" ]]
			then
				#wenn er nicht zu ende ist, löschen wir alles vom /* bis zum Zeilenende und switchen den Modus
				line=`echo "$k" | sed -e 's/\/\*.*//'`
				echo "$line"
				let removing_comments="1";
			else
				#wenn comment nicht leer ist, ist der Kommenar da auch zu Ende und wir löschen ihn
				line=`echo "$k" | sed -e 's/\/\*.*\*\///g'`
				echo "$line"
			fi
		fi
	else
		# wenn wir im modus "Kommentare" sind, prüfen wir, ob er zu Ende ist.
		comment=`echo "$k" | grep '\*/'`
		#echo "$removing_comments:comment=$comment	$k"
		if [[ ! "X" == "X$comment" ]]
		then
			line=`echo "$k" | sed -e 's/.*\*\///'`
		#    echo "$line"
			removing_comments=0;
		fi
	fi
done






----------8<-------
Hallo,

ich soll für die Uni ein Shell-Skript schreiben, dass Kommentare aus C-Quellcode entfernt.

Soweit klappt das auch sehr gut, nur habe ich ein Problem:

Ich klapper die Datei zeilenweise ab und schaue, ob ein Kommentar beginnt. Wenn nun aber nur der Kommentaranfang (also /* ) steht, wird in Zeile 8 "$k" durch den Inhalt meines root-Verzeichnisses ersetzt.

Wenn ich das aber mit '$k' escape, steht da natürlich nur $k. Irgendeine Ahnung, wie ich dieses Problem am besten umgehen kann?

__________________
LAUFT! Ich spiele KILLERSPIELE!

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Misel: 18.01.2005 20:11.

18.01.2005 19:30 Misel ist offline E-Mail an Misel senden Homepage von Misel Beiträge von Misel suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Okay, bin nun mittlerweile doch auf einen Bash-Befehl gestoßen (worden), mit dessen Hilfe man Zeilenumbrüche in der Datei ersetzen kann. Dadurch wird's möglich, die ganze Sache wesentlich simpler zu gestalten:

cat whatever.c | tr "\n \r" "$ §" | sed "s/\/\*.*\*\///g" | tr "$ §" "\n \r" >whatever.c

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

20.01.2005 19:08 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » [Bash] C-Kommentare entfernen

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH