.NET Base: selbsterstelltes Dateiformat korrekt auslesen - .NET Base

Zum Inhalt wechseln

  • (2 Seiten)
  • +
  • 1
  • 2
  • Du kannst kein neues Thema erstellen
  • Dieses Thema ist geschlossen

selbsterstelltes Dateiformat korrekt auslesen

Geschrieben 26. Jun 2010 - 09:36 (#1) Mitglied ist offline   pasi 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 78
  • Registriert: 16. Nov. 09
  • OS: Windows Vista
  • IDE: VB 2010 Express Version

Hallo,

ich arbeite momentan an einem kleinen Texteditor, der ein eigenes Dateiformat verwendet. Wie ich es speichere weiß ich schon, nur mit dem auslesen Habe ich keinen Plan.


So sieht das Format aus:


{H;Arial;000;Black;0;11}



Also als erstes der Buchstabe, dann die Schriftart, danach die drei nullen für Fett, kursiv und unterstrichen am Ende dann ob der Buchstabe hochgestellt oder tiefgestellt ist. Das letzte gibt die Schriftgröße an. 




Ich habe mir schonmal überlegt, das ich nach der geöffneten geschweiften Klammer suche und dann den Buchstaben danach in die RichtextBox schreibe. Nur wie ich dann die anderen Information auslesen soll weiß ich nicht. Ich wäre dankbar für Hilfe.

Dieser Beitrag wurde von pasi bearbeitet: 26. Jun 2010 - 09:42

0

Geschrieben 26. Jun 2010 - 09:58 (#2) Mitglied ist offline   Maximilian 

  • caffeine addicted
  • Gruppe: Administratoren
  • Beiträge: 846
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Hey Pasi,
du könntest dir mittels RegEx immer alles holen was zwischen den beiden geschweiften Klammern liegt und dann diesen String nach ";" splitten. Dann bekommst du ein Array in welchem du über den entsprechenden Index an die Werte kommst.
Als RegEx könnteste z.B. folgendes verwenden: {(.*?)}
Splitten und co sollteste ja alleine hinbekommen, oder?

Cheerio
Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
1

Geschrieben 26. Jun 2010 - 10:19 (#3) Mitglied ist offline   Simon 

  • Newsmoderator
  • Gruppe: Moderatoren
  • Beiträge: 180
  • Registriert: 10. Sep. 09
  • Wohnort: Straße des Codes
  • OS: Windows 7
  • IDE: Visual Studio 2008 TS, Eclipse, NetBeans

Ich würde mir nur evtl. überlegen, ob das Format so genial ist - RTF oder XML grüßt :)
0

Geschrieben 26. Jun 2010 - 10:34 (#4) Mitglied ist offline   pasi 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 78
  • Registriert: 16. Nov. 09
  • OS: Windows Vista
  • IDE: VB 2010 Express Version

@Maximilian

Tut mir leid aber davon weiß ich wenig, ich suche mir momentan ein paar Tutorials dazu raus. Falls jemand gute kennt kann er mir ja mal einen Link dazu geben.




@Simon

Ich weiß dass das jetzt nicht ein so gutes Format ist, aber allemal besser als rtf, nämlich durch viele Formatierungen verändert sich bei meinem Format die Größe kaum. Bei RTF habe ich nach zwei Formatierungen bei zwei Wörtern schon eine 30 KB große Datei. Bei meinem Format ist die Größe dagegen dann nur 363 Bytes.


0

Geschrieben 26. Jun 2010 - 10:41 (#5) Mitglied ist offline   Simon 

  • Newsmoderator
  • Gruppe: Moderatoren
  • Beiträge: 180
  • Registriert: 10. Sep. 09
  • Wohnort: Straße des Codes
  • OS: Windows 7
  • IDE: Visual Studio 2008 TS, Eclipse, NetBeans

Ein nettes RegExp-Tutorial: http://www.danielfet...aere-ausdruecke

Die Nutzung in C# ist eigentlich durch den System.Text.RegularExpressions-Namespace sehr einfach :)

Noch ein Hinweis: Denk an das Maskieren von bestimmten Zeichen, damit du dir nicht dein Format zerschießt ;)
1

Geschrieben 26. Jun 2010 - 10:43 (#6) Mitglied ist offline   pasi 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 78
  • Registriert: 16. Nov. 09
  • OS: Windows Vista
  • IDE: VB 2010 Express Version

Beitrag anzeigenSimon sagte am 26. Jun 2010 - 10:41:

Ein nettes RegExp-Tutorial: http://www.danielfet...-und-opensource,artikel,regulaere-ausdruecke

Die Nutzung in C# ist eigentlich durch den System.Text.RegularExpressions-Namespace sehr einfach :)

Noch ein Hinweis: Denk an das Maskieren von bestimmten Zeichen, damit du dir nicht dein Format zerschießt ;)


Danke für das Tutorial, aber was meinst du mit maskieren?
0

Geschrieben 26. Jun 2010 - 10:47 (#7) Mitglied ist offline   Simon 

  • Newsmoderator
  • Gruppe: Moderatoren
  • Beiträge: 180
  • Registriert: 10. Sep. 09
  • Wohnort: Straße des Codes
  • OS: Windows 7
  • IDE: Visual Studio 2008 TS, Eclipse, NetBeans

Zitat

{H;Arial;000;Black;0;11}


Angenommen, ich gebe nun als Text "{Hallo}" oder "Simon;Apfel" ein, dann ist deine Datei "zerstört" bzw. der Parser hätte Probleme beim Einlesen der Datei. Deshalb musst dir etwas überlegen, wie du diese Zeichen maskierst, d.h. wie du sie so unschädlich machst, dass sie deinem Format nicht schaden können. - Relativ ähnlich der Thematik SQL-Injection, auch hier wird oft ausgenutzt, dass bestimmte übergebene Parameter nicht maskiert werden.
0

Geschrieben 26. Jun 2010 - 11:03 (#8) Mitglied ist offline   pasi 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 78
  • Registriert: 16. Nov. 09
  • OS: Windows Vista
  • IDE: VB 2010 Express Version

Also mit maskieren meinst du doch das ich zum Beispiel "{" durch "GK" ersetze und das dann beim auslesen wieder in "{" umwandel.
0

Geschrieben 26. Jun 2010 - 11:19 (#9) Mitglied ist offline   Maximilian 

  • caffeine addicted
  • Gruppe: Administratoren
  • Beiträge: 846
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Genau das meint er.
Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
0

Geschrieben 26. Jun 2010 - 11:33 (#10) Mitglied ist offline   Simon 

  • Newsmoderator
  • Gruppe: Moderatoren
  • Beiträge: 180
  • Registriert: 10. Sep. 09
  • Wohnort: Straße des Codes
  • OS: Windows 7
  • IDE: Visual Studio 2008 TS, Eclipse, NetBeans

Jein, das meinte ich nun nicht so ganz :)

Angenommen ich gebe nun in meinem Textdokument GK (z.B. für Grundkurs) ein, dann wird das auf einmal durch eine geschweifte Klammer ausgewechselt... - Ich würde die Maskierung durch Backslashes realisieren, also z.B. \{, wobei auch Backslashes durch \\ maskiert werden müssten. :)
0

Geschrieben 26. Jun 2010 - 11:41 (#11) Mitglied ist offline   Maximilian 

  • caffeine addicted
  • Gruppe: Administratoren
  • Beiträge: 846
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Also wenn ich ihn richtig verstanden habe nicht, denn er macht dieses Klammernding ja für jeden Buchstaben, oder habe ich mich da jetzt verlesen?
Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
0

Geschrieben 26. Jun 2010 - 11:45 (#12) Mitglied ist offline   Simon 

  • Newsmoderator
  • Gruppe: Moderatoren
  • Beiträge: 180
  • Registriert: 10. Sep. 09
  • Wohnort: Straße des Codes
  • OS: Windows 7
  • IDE: Visual Studio 2008 TS, Eclipse, NetBeans

Kann ich mir persönlich nicht vorstellen, da dann die Dateigröße bei zwei Wörtern, wie z.B. Hallo Welt doch etwas größer werden würde.

Solltest du es doch so machen: Don't do it - Du vergeudest damit nur Speicherplatz!
0

Geschrieben 26. Jun 2010 - 11:47 (#13) Mitglied ist offline   pasi 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 78
  • Registriert: 16. Nov. 09
  • OS: Windows Vista
  • IDE: VB 2010 Express Version

Also ich mache das für jeden Buchstaben einzelnt.




und beim auslesen habe ich das bis jetzt hinbekommen, nur lädt er nicht die richtige Schriftart.




Visual Basic.NET
Dim text() As String
                Dim daten() As String
                Dim loadtext As String = My.Computer.FileSystem.ReadAllText(dlgOpenFile.FileName)
                Dim buchstabe As String

                text = Regex.Split(loadtext, "{(.*?)}")


                For i As Integer = 0 To text.Length - 1

                    daten = Regex.Split(text(i), ";")

                    For ii As Integer = 0 To daten.Length - 1 Step 6

                        buchstabe = daten(ii)
                        Me.rtf_box.Text = rtf_box.Text & buchstabe

                        For iii As Integer = 1 To daten.Length - 1 Step 6
                            rtf_box.Select(Me.rtf_box.TextLength - 1, 1)
                            rtf_box.SelectionFont = New Font(daten(iii), 11, FontStyle.Regular)
                        Next iii

                    Next ii

Next i




0

Geschrieben 26. Jun 2010 - 12:10 (#14) Mitglied ist offline   Simon 

  • Newsmoderator
  • Gruppe: Moderatoren
  • Beiträge: 180
  • Registriert: 10. Sep. 09
  • Wohnort: Straße des Codes
  • OS: Windows 7
  • IDE: Visual Studio 2008 TS, Eclipse, NetBeans

*Kopf meets Tischplatte* Eingefügtes Bild

Und da argumentierst du ernsthaft noch mit "weil mein Format speichersparender ist"? - Nun stell dir mal vor, ich schreibe zwei Seiten Text mit der gleichen Formatierung, da würde eine enorme Redundanz auftreten. Eingefügtes Bild

Überdenke am besten noch mal dein Format, bevor du dich an die konkrete Implementierung des Projekts machst. Als kleiner Tipp sei erwähnt, dass das OpenXML-Format von Leuten erarbeitet wurde, die evtl. mehr Wissen als du hatten, schau dir das am besten mal an :)
1

Geschrieben 26. Jun 2010 - 12:31 (#15) Mitglied ist offline   pasi 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 78
  • Registriert: 16. Nov. 09
  • OS: Windows Vista
  • IDE: VB 2010 Express Version

Ok, dann mache ich lieber jedes wort bevor du noch Kopfschmerzen bekommst.
0

Geschrieben 26. Jun 2010 - 12:48 (#16) Mitglied ist offline   Maximilian 

  • caffeine addicted
  • Gruppe: Administratoren
  • Beiträge: 846
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Aber jedes Wort schränkt doch auch wieder ein. So kann man einen bestimmten Teil nicht hervorheben und es produziert immernoch sehr sehr viel Overhead wenn die Formatierung immer gleich bleibt. Da musst du etwas dynamischer herangehen und nur dort Formattags setzen, wo sich auch wirklich was ändert. Das musst du bei deinem Parser zwar mehr Programmieren aber das wäre dann wirklich platzsparend.

Cheerio
Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
1

Geschrieben 26. Jun 2010 - 13:06 (#17) Mitglied ist offline   pasi 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 78
  • Registriert: 16. Nov. 09
  • OS: Windows Vista
  • IDE: VB 2010 Express Version

 Da müsste ich ja wieder jedes Zeichen auslesen überprüfen ob es die gleiche Formatierung hat wie das vorherige Zeichen und dann dazu reinschreiben. Das wird ja zu schaffen sein.




Edit:

Und ich habe es geschafft.



Edit²:

Tut mir leid, aber ich bräuchte immernoch Hilfe bei dem Laden der Datei weil ich einfach keine Ahnung habe wie ich die Schriftart usw Auslesen soll.




Hier nochmal der Code zum auslesen:




Visual Basic.NET
                Dim text() As String
                Dim Word As String
                Dim daten() As String
                Dim loadtext As String = My.Computer.FileSystem.ReadAllText(dlgOpenFile.FileName)

                text = Regex.Split(loadtext, "{(.*?)}")

                For i As Integer = 0 To text.Length - 1

                    daten = Regex.Split(text(i), ";")

                    For ii As Integer = 0 To daten.Length - 1 Step 6

                        Word = daten(ii)
                        Me.rtf_box.Text = rtf_box.Text & Word

                    Next ii

Next i




Dieser Beitrag wurde von pasi bearbeitet: 26. Jun 2010 - 18:09

0

Geschrieben 27. Jun 2010 - 09:42 (#18) Mitglied ist offline   pasi 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 78
  • Registriert: 16. Nov. 09
  • OS: Windows Vista
  • IDE: VB 2010 Express Version

Kann mir wirklich keiner helfen? Ich sitze jetzt schon insgesamt drei Stunden davor und habe immer noch keine Lösung gefunden.




(hoffentlich kriege ich jetzt keine Verwarnung dafür)


0

Geschrieben 27. Jun 2010 - 20:55 (#19) Mitglied ist offline   Simon 

  • Newsmoderator
  • Gruppe: Moderatoren
  • Beiträge: 180
  • Registriert: 10. Sep. 09
  • Wohnort: Straße des Codes
  • OS: Windows 7
  • IDE: Visual Studio 2008 TS, Eclipse, NetBeans

Ich würde dir bei deinen Überlegungen mal die Lektüre *hier* empfehlen. Ich habe da mal einfach so meine Gedanken niedergeschrieben, die mir so während der letzten Jahre in VBP und hier gekommen sind :)
0

Geschrieben 28. Jun 2010 - 12:43 (#20) Mitglied ist offline   lyn87 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 63
  • Registriert: 12. Sep. 09

Formattierung per character ist doch an sich eine schöne sache, dann kann man wirklich sauber ohne nebeneffekte formatieren. Zumindest bei Notepad oder RTF-Editoren hätte ich mir so ein verhalten gewünscht. Die Redundanz lässt sich durch anschließendes zippen bestimmt zu 80-95% eliminieren, da müsste man einfach mal einen test fahren.

Beispiel
774,746 Wörter in der Bibel, bei geschätzten 8 Zeichen pro Wort bei UTF-8:
49 583 744 Byte, könnte gezippt so 4-8mb geben.

Mit ein bisschen intelligenz (nur änderungen anzeigen, zip, diffs zur vorherigen version, nutzen von bitfeldern, usw) wäre das ganze relativ kompakt. XML ist auch nicht unbedingt für den geringen overhead bekannt.
0

Thema verteilen:


  • (2 Seiten)
  • +
  • 1
  • 2
  • Du kannst kein neues Thema erstellen
  • Dieses Thema ist geschlossen


Similar Topics Collapse

  Thema Forum Themenstarter Statistik Letzter Beitrag
Neue Antworten Symbol auto_increment auslesen mit c# in sqlite Datenbankprogrammierung wsl 
  • 0 Antworten
  • 733 Aufrufe
Neue Antworten Symbol [Alpha] Escriure
Ein Texteditor mit eigenem Dateiformat
Projekte pasi 
  • 7 Antworten
  • 345 Aufrufe
Neue Antworten Symbol [VB.Net] Die neusten Downloads von Chip.de auslesen Snippets Jan 
  • 0 Antworten
  • 403 Aufrufe
Neue Antworten Symbol [VB.NET] Plattformarchitektur auslesen Snippets Dennis Alexander 
  • 0 Antworten
  • 683 Aufrufe
Neue Antworten Symbol Anhänge XML auslesen und in Listview hinzufügen Problem VB.NET Jan 
  • 2 Antworten
  • 293 Aufrufe

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0


Enter your sign in name and password


Sign in options
Mit OpenID anmelden Mit Windows Live anmelden   Or sign in with these services