Entwickler-Ecke

IO, XML und Registry - .cs Datei in Word speichern, manche Programmzeilen entfallen


leni - So 05.06.16 09:54
Titel: .cs Datei in Word speichern, manche Programmzeilen entfallen
Hallo,
ich versuche seit einigen Tagen folgendes Problem, leider erfolglos zu lösen. :?
(Ich programmiere C# mit Visual Studio.)
Ziel ist es eine ausgewählte cs. Datei in Word zu speichern. Das klappt mittlerweile auch schon.
Nun sollen "unnötige Befehle" wie z.B die "using-Befehle" nicht in die Word Datei übernommen werden.
Wie kann ich das Programmtechnisch verwirklichen, ohne das ich "von Hand" das Word Dokument durchsuchen muss und ungewünschte Programmzeilen rauslöschen muss?


Th69 - So 05.06.16 11:28

Hallo und :welcome:

wie überträgst du denn die CS-Datei nach Word?
Und was genau sind denn bei dir "unnötige Befehle", d.h. soll die Übertragung nach Word für Code-Beispiele sein?
Bei "using"-Deklarationen kannst du ja einfach jede Zeile überprüfen, ob diese mit diesem Wort anfängt (vorher am besten die Zeile "trimmen").
Oder gibt es bei dir noch mehr Zeilen, die entfallen sollen?


Ralf Jansen - So 05.06.16 11:32

Warum überträgst du nicht einfach nur die Zeilen aus der cs Quelle nach Word die du haben willst? Da irgendwas in Word zu machen scheint sinnfrei.

Wenn du genaue Sourcecode Formatierung beibehalten willst wird dir nicht viel mehr übrig bleiben als eine eigene Art des Parsen zu schreiben(bevor das an Word übergeben wird). Ansonsten wenn das nicht relevant ist kannst du die .cs Datei per CodeDomParser lesen und nur die Teile wieder schreiben die du haben willst.

Was ist der Sinn davon Sourcecode (außer mal ein paar gezielt ausgewählte einzelne Zeilen zu erklärenden Zwecken in einer Doku) in Word darzustellen?


leni - So 05.06.16 12:50

Zitat:

wie überträgst du denn die CS-Datei nach Word?


Beim Klick auf einen Button öffnet sich ein Fenster mit allen bisher Programmierten Projekten, daraus wähle ich dann das gewünschte Projekt und die gewünschte .cs Datei diese wird dann in einer Listbox angezeigt und in Word übertragen.

Mit diesem Befehl übertrage ich die Datei Zeile für Zeile in Word, da ich nur einen string übertragen kann:



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
        string zeile;

                WordprocessingDocument Doc = WordprocessingDocument.Create("Eileen.docx", WordprocessingDocumentType.Document); 
                Doc.AddMainDocumentPart();   
                Doc.MainDocumentPart.Document = new Document();     
                Doc.MainDocumentPart.Document.Body = new Body(); 

                for (int i = 0; i < Inhalt.Count; i++) 
                {
                    zeile = Inhalt[i];
                    Doc.MainDocumentPart.Document.Body.Append(new Paragraph(new Run(new Text(zeile)))); 
                }

                Doc.Close();        
                MessageBox.Show("Done");


Zitat:
Oder gibt es bei dir noch mehr Zeilen, die entfallen sollen?

Ich hatte mit überlegt Kommentare auch raus zu nehmen aber die sollten ja im Normalfall sinnvoll sein. Deshalb wollte ich eig nur das raus nehmen was sowieso generell bei dem öffnen eines neuen Projektes ect. schon da steht.
Eigentlich sollten es dann auch nicht alle "using Befehle" sein aber lieber alle rausgenommen als eine halbe Seite using Befehle da stehen zu haben 8)


Zitat:
.cs Datei per CodeDomParser lesen und nur die Teile wieder schreiben die du haben willst


Das sagt mir jetzt leider nichts da ich noch nicht so lange bzw sehr viel damit gearbeitet habe. :oops:

Zitat:
Was ist der Sinn davon Sourcecode in Word darzustellen?


Es soll im Endefekt eine Vereinfachnung sein um gewünschte Dateien schneller ausdrucken zu können, ohne das ich erst alles umformatieren muss.
Zugriff soll quasi über .exe auf dem Desktop erfolgen, Datei einfach auswählen und diese soll dann sofort druckbar sein. :)

Moderiert von user profile iconChristian S.: Quote- durch C#-Tags ersetzt


Ralf Jansen - So 05.06.16 13:27

Das Framework enthält bereits einfache Parser/Compiler [https://msdn.microsoft.com/de-de/library/microsoft.csharp.csharpcodeprovider(v=vs.100).aspx] für csharp mit dem du eine Sourcecode Datei zerlegen kannst um nur die Einzelteile rauszunehmen die dich interessieren.

Zitat:
Zugriff soll quasi über .exe auf dem Desktop erfolgen, Datei einfach auswählen und diese soll dann sofort druckbar sein. :)


Ich hielt ja schon das übertragen von Sourcecode nach Word für eher unsinnig. Ihn auszudrucken schlägt das natürlich spielend ;)
Hab mal eben das File Menu von Visual Studio geöffnet und tatsächlich da gibt es ein Print Command. Ich benutze VS zeigt circa 20 Jahren aber das der Drucken kann ist mir neu.
Was will man mit ausgedrucktem Code?


papa69 - So 05.06.16 13:54

Hallo,

bevor du deine Zeilen in die listbox überträgst, könntest du diese in einem string-Array "zwischenspeichern" und dann darüber iterieren und die "Überflüssigen" Zeilen gar nicht erst der listbox hinzufügen


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
...

for (int i = 0; i < textArray.Length; i++)
{
  if (!textArray[i].StartsWith("using"))
    listbox.Items.Add(textArray[i]);
}
...


Das würde aber nur funktionier, wenn du keine Zeilennummern anzeigst.


leni - Di 07.06.16 16:08

Super vielen vielen Dank für die Hilfe mit dem Quellcode etwas abgeändert hat es super geklappt und ich habe jetzt alle using Zeilen und alle Zeilen in denen nichts steht drausen.
Das einzige was jetzt aufgetaucht ist, das zu lange Quellcodezeilen in dem WORD Dokument umgebrochen werden und von beginn an geschrieben werden was natürlich nicht so schön aussieht.

C#-Quelltext
1:
2:
3:
4:
if (temp.Length > 60)
{
    temp = temp.Insert(60"                         ");
}

Ich habe versucht hiermit eine die Zeile nach dem umbruch einzurücken, leider Funktioniert das nicht.
Habt Ihr auch hier eine Idee?

Zitat:
Was will man mit ausgedrucktem Code?

Gute Frage, als Sicherung evtl?
Aber da ich noch in der Schule bin, um ihn an alle zu verteilen. :wink:

Moderiert von user profile iconTh69: Quote- durch C#-Tags ersetzt