Ist klug sowas mit VB.Net zu machen, oder muss SQL her?

Vamp7771

Mitglied
Hallo Leute,

ich habe nun einen Auftrag bekommen, etwas zu programmieren und zwar mit VB.Net...

Ich weiß aber momentan gar nicht wo ich anfangen soll und ob das VB.Net wirklich für sowas optimal ist, oder man doch lieber ein richtiges Datenbank Programm hinzuziehen sollte (Sql)

(Vorneweg, ich bitte hier nicht um einen Code, ich versuche es schon selbst hinzubekommen, jedoch bin ich für jeden Tipp zur Vorgehensweise unglaublich dankbar, da ich erst seit 2 Monaten VB.Net programmiere und wirklich noch Anfänger bin und trotzallem versuche mit als Frau durch die Männerwelt des Programmierens durchzuboxen :) )

Also ich bekomme einen Text (kleiner Ausschnitt)

Code:
 UNB+UNOA:1+TOYOTAUK+P1781+051005:0629+000001++INVOICE
 UNH+0000011+INVOIC:D:96A
 BGM+389+P1781*000187
 DTM+137:200510050629:203
 DTM+3:20050930:102
 NAD+BY+EM+AVENUE DU BOURGET 60::BOURGETLAAN 60:BRUSSELS:BELGIUM+LIEFERANT MOTOR ENGINEERING & MFNG EUR++++B1140
 RFF+VA:BE0464258430
 CTA+IC+:KIRSTY TARBARD
 NAD+SU+P1781*+Strasse 24-30::ORT::LAND+FIRMENNAME(Standort) GMBH++++PLZ
 FII+RH+600150006:TESTFIRMA (ETTLINGEN) GMBH+30030:::300308
 RFF+VA:DE811848695
 CTA+IC+:Petra Mustermann
 CUX+1:EUR
 CUX+2:EUR++1.000000
 PAT+3
 DTM+140:20051025:102
 LIN+1++772100F01000
 QTY+48:2:PIE
 DTM+310:20050902:102
 FTX+ZZZ+++ART 28C A 6TH VAT DIR
 MOA+203:52.8000
 PRI+AAF:26.4010
 RFF+ZZZ:SD
 RFF+ON:I207636700
 RFF+MA:200509010100
 LOC+7+BURN+S1
 LOC+113+DE
 TAX+7+VAT+++Z:::0.0000
 MOA+124:0.0000
 LIN+2++772100F01000
 QTY+48:5:PIE
 DTM+310:20050909:102

Mit diesem Text muss ich nun folgendes anstellen.

(Aufgabenstellung vom Cheffe ^^, ich zitiere:)

Jede Zeile ist ein Segment
Ein Segment fängt mit einem Prefix XXX an.
Ein Segment hat Argumente, die mit + getrennt sind.
"+" und ":" sind trennzeichen. ":" dient zur Trennung eines Untersegmentes
(wahrscheinlich hier nicht benutzt)

Die Infos, die uns interessieren fangen mit "UNH" an und enden mit "UNT".
DTM+140 ist wichtig weil es das Zahlungsdatum Segment ist
Innerhalb eines Segmentes interessieren uns folgende Segmente LIN, QTY, DTM,
FTX, MOA, PRI, RFF, LOC, TAX, MOA.


So, nun muss ich diese Segmente aus dem Text auslesen lassen und in ein leeres Excel.Worksheet einfügen. Das ist die Aufgabe.

Jedes Segment sollte in eine neue Zeile (Excel, A1/A2 usw.) geschoben werden.
Die Reinfolge im Excel sollte die selbe wie auch im .txt file sein.


___________________________________________________________________

Schafft VB.Net sowas oder ist doch SQL optimaler?
Wie würdet ihr da ran gehen, mit Dataset / Datagrid, Arrays oder einfach nur per Streamreader/Writer?

Ich bin für jede Hilfe sehr dankbar.

Dieses Forum ist genial, da ich hier schon so oft auf super Tipps gestoßen bin!

Danke, Euer Vamp!
 
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
Also, das sind doch Bankdaten (mir fällt jetzt nur pardout der Name des Formats nicht ein).

Was willst du an dieser Stelle mit SQL? Du hast es doch nicht mit Datenbanken zu tun.

StreamReader und Co. aus dem System.IO-Namespace werden deine Freunde sein. Einfach zeilenweise einlesen und jede Zeile mal nach "+" trennen. Dann hast du schon eine Menge geschafft. Daraus erhältst du ein Array und dieses musst du noch nach den gewünschten Informationen durchsuchen.

Bis dahin würde ich das mal versuchen zu lösen. Den Excel-Teil würde ich vorerst aussen vor lassen. Das kannst du immer noch dazubauen, wenn dieser Teil mal funktioniert.

Hilfen findest du auf jeden Fall in der MSDN. Dort kannst du dir die Beschreibungen und Beispielcode zu den einzelnen Klassen angucken und somit viel lernen.

Gewöhne dir nur an, prinzipiell jede Klasse nachzuschlagen die du verwendest und dir durchzulesen, was sie alles kann. Das erspart dir später sehr viel Zeit, Arbeit und Nachfragerei.
 

Vamp7771

Mitglied
jap, ist edi ^^

:)
Gut erkannt.
(gibt es etwa schon fertige Programme um soetwas aufzubröseln?)

Vielen Dank für die Hilfe, ich werde gleich morgen früh versuchen, den Text soweit aufzuteilen.
Sobald ich das habe, werde ich mich wieder melden (im Falle ich komme nicht weiter)

Ich lassen den Thread mal offen bis morgen.

Gute Nacht @ All
 
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
Naja, es gibt natürlich fertige Programme um mit EDIFACT (danke Thomas, mir ists nicht eingefallen *g*) zu arbeiten. Für deinen speziellen Fall wirst du es aber vermutlich selber machen müssen.

Ich hatte mal ein kleines Tool für EDIFACT geschrieben, allerdings für meine alte Firma, ergo hab ich den Sourcecode nicht mehr ;-)
 

SixDark

Erfahrenes Mitglied
Hi!

Wenn Du das Ganze eh in Excel haben willst, warum machst Du es nicht gleich in Excel-VBA? Dann sparst Du Dir das Problem, es nachher aus Deinem DOTNET-Programm nach Excel zu schieben...

MfG
..::SD::..
 

Vamp7771

Mitglied
Hm, wir haben hier verschiedene Office Versionen im Einstatz und das Programm soll auf jedem Rechner mit .Net Framework 1.1 laufen.

Es soll auch für verschiedene Länder in verschiedenen Sprachen verfügbar sein, das sind die einzigsten Argumente wieso ich es selbst in VB schreiben wollte und nicht in VBA, und dann wäre da noch das Argument, dass es Cheffe es auch in VB will :)

Mh, ich habe noch ein Problem, wie muss ich dem Programm klar machen, dass es nach "+" suchen soll und es ersetzten soll?

Hier der Code dazu:

Code:
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim Textlesen As System.IO.StreamReader = New System.IO.StreamReader("C:\toyota.txt")
        Dim TextSchreiben As System.IO.StreamWriter = New System.IO.StreamWriter("C:\toyotaneu.txt")

        TextSchreiben.Write(System.Text.RegularExpressions.Regex.Replace(Textlesen.ReadToEnd, "'", vbCrLf))
        TextSchreiben.Write(System.Text.RegularExpressions.Regex.Replace(Textlesen.ReadToEnd, "+", "_"))
		
		'//Da erhalte ich immer die Fehlermeldung, dass er x,y Koordinaten benötigt, ich gehe mal davon aus, er versucht eine Gleichung zu erstellen.
Hat jm eine Idee, wie ich dem Programm das klar machen soll, das er nach einem "PLUS" suchen soll und es durch "_" oder Leerzeichen ersetzen muss?
 
 Textlesen.Close()
        Textlesen = Nothing
        TextSchreiben.Close()
        TextSchreiben = Nothing

    End Sub


Vielen Dank für die vielen Antworten, ihr habt mir bereits sehr geholfen!
Tolles Team, super Forum!

Euer Anfänger, Vamp
 

SixDark

Erfahrenes Mitglied
Hi!

Code:
Dim str As String
str.Replace(oldChar, newChar)

Also wenn Du die Stringvariable hast, einfach '.Replace("+", ";") wenn Du das '+' durch ein Semikolon ersetzen willst - nur so als Beispiel.

EDIT:
Oh, ich hab grad gesehen, Du machst das Ganze mit RegEx. Da hab ich nicht so die Ahnung, finde es aber nicht unbedingt notwendig. Lies den String einfach in eine Variable ein und nutze Replace - viel einfacher - finde ich...

MfG ..::SD::..
 
Zuletzt bearbeitet:

Vamp7771

Mitglied
Hm, habe es eben versucht, aber sobald ich das durchführe wird das Programm wieder superlangsam.

(Hier der Code)


Code:
Dim Textlesen As System.IO.StreamReader = New System.IO.StreamReader("C:\Input.txt")
        Dim TextSchreiben As System.IO.StreamWriter = New System.IO.StreamWriter("C:\Output.txt")

Dim Altertext as String

AlterText = Textlesen.ReadtoEnd
AlterText = Replace(AlterText, "+", "_")

Würde gerne die Regex Option nutzen, nur das funktioniert mit "+" nicht.
Kennt sich jm mit Regex etwas besser aus?

Gruß Vamp
 
Zuletzt bearbeitet: