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

Vamp7771

Mitglied
:) Danke, aber das bringt mich leider nicht weiter, da ich einen code schreiben muss, der einfach bestimmte Werte gesondert auflistet und diese in einen Excel Sheet schreibt.

Auf der Seite jedoch, ist eine Convertierung von EDI Formularen in Xls.

Weiss jemand wie ich:

TextSchreiben.Write(System.Text.RegularExpressions.Regex.Replace(Textlesen.ReadToEnd, "'", vbCrLf))

so umwandeln kann, dass der Befehl auch mir alle "+" Zeichen sucht und diese durch Leerzeichen ersetzt?

Ich bekomme immer folgende Fehlermeldung:


Eine nicht behandelte Ausnahme des Typs 'System.ArgumentException' ist in system.dll aufgetreten.

Zusätzliche Informationen: "+" wird verarbeitet - Quantifizierer {x,y} nach nichts.

Hm, er nimmt "+" nicht als String, oder wie kann ich das verstehen? (mit anderen Strings, funktioniert der Befehl einwandfrei)

Danke (mensch ich frag so viel, hm komm mir richtig blöd vor)

Euer Vamp
 

JensG

Erfahrenes Mitglied
Hallo Vamp,

setze das Pluszeichen im Ausdruck mal in eckige Klammern, dann sollte es funktionieren.
"[+]"

Jens
 

Vamp7771

Mitglied
Vielen Dank für den Tipp mit den eckigen Klammern!
Damit hat es funktioniert!

Dank euch, habe ich nun den Text soweit sortiert:

Code:
UNB    UNOA:1    TOYOTAUK    P1781    051103:0206    000003        INVOICE
UNH    0000031    INVOIC:D:96A
BGM    389    P1781*000194
DTM    137:200511030206:203
DTM    3:20051031:102
NAD    BY    EM    (TMEM ACCOUNTING):AVENUE DU BOURGET 60:BOURGETLAAN 60:BRUSSELS:BELGIUM    TOYOTA MOTOR EUROPE NV/SA                B1140
RFF    VA:BE0441571714
CTA    IC    :KIRSTY MUSTERMANN
NAD    SU    P1781*    BLABLASTR. 24-30::ORT::Germany    FIRMA (ORT) GMBH                PLZ
FII    RH    600150006:FIRMA (ORT) GMBH    30030:::300308
RFF    VA:DE811848695
CTA    IC    :PETRA MUSTERMANN
CUX    1:EUR
CUX    2:EUR        1.000000
PAT    3
DTM    140:20051125:102
LIN    1        772100F02000
QTY    48:2:PIE
DTM    310:20051004:102
FTX    ZZZ            ART 28C A 6TH VAT DIR
MOA    203:43.9900
PRI    AAF:21.9970
RFF    ZZZ:SD
RFF    ON:I208110200
RFF    MA:200509280100
LOC    7    BURN    S1
LOC    113    DE
TAX    7    VAT            Z:::0.0000

Was wäre der nächste Schritt, nun müsste man wohl Arrays erstellt werden, in die einzelne Begriffe wie eine Art Tabelle eingetragen werden, damit man es später leicher in ein Excel Worksheet schieben kann. (Falls ich einen Denkfehler habe, einfach laut schreien, bin lernfähig :) )

Der Code bisher:

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

        ' Input.txt wird ausgelesen

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

        'Text wird ausgelesen und enstprechend sortiert (Zeilenumbruch wird an Stelle 
        von "'" eingefügt)
        TextSchreiben.Write(System.Text.RegularExpressions.Regex.Replace
       (Textlesen.ReadToEnd, "'", vbCrLf))

        'Zu lesender Text wird geschlossen

        Textlesen.DiscardBufferedData()
        Textlesen.Close()
        Textlesen = Nothing
        TextSchreiben.Close()
        TextSchreiben = Nothing

        '_____________________________________________________________________
       
        ' Inputneu.txt wird ausgelesen

        Dim Textlesen2 As System.IO.StreamReader = New System.IO.StreamReader
        ("C:\Inputneu.txt")
        Dim Textschreiben2 As System.IO.StreamWriter = New System.IO.StreamWriter
        ("C:\Output.txt")

        'Text wird ausgelesen und enstprechend sortiert (Das "+" wird durch 4 Leerzeichen 
        ersetzt)

        Textschreiben2.Write(System.Text.RegularExpressions.Regex.Replace     
        (Textlesen2.ReadToEnd, "[+]", "    "))

        ' Zu lesender Text wird ist geschlossen

        Textlesen2.DiscardBufferedData()
        Textlesen2.Close()
        Textlesen2 = Nothing
        Textschreiben2.Close()
        Textschreiben2 = Nothing


    End Sub


Was würdet ihr nun tun?

Gruß Vamp^^
 
Zuletzt bearbeitet:

Vamp7771

Mitglied
Plz Help, ich sitze schon seit heute morgen an folgendem Problem:

Ich habe hier einen Autzug aus der Liste kopiert, die ich mittlerweile ein wenig vorsortiert habe:

Code:
Beispiel siehe oben im Post davor

Gibt es eine einfache Möglichkeit nun aus diesem Text folgende Werte auszulesen und diese wegzuschreiben in z.B.: ein .Txt oder .xls?

Folgende Prefixe benötige ich: LIN / QTY / DTM / FTX / MOA / PRI / RFF / LOC / TAX / MOA
Die oben genannten Werte müssen zwischen Anfangsprefix "UNH" und Endprefix
"UNT" geschrieben werden.
Mein Problem ist auch noch, das z.B.: LIN auch in Line Item Number umgewandelt werden muss. Andere Prefixe ebenfalls...oh mann...ich glaub ich hab mich übernommen.
Nochmals kurz:

Oben genannten Prefixe müssen in ein File geschrieben werden. Die nicht genannten Prefixe z.B.: UNS sollen dabei weggelassen werden.
Die Prefixe müssen im Text voll ausgeschrieben werden. (QTY = Quantity) und natürlich muss alles was hinter einem Prefix steht mit übernommen werden. Sprich alle Werte, die rechts in der selben Zeile vom Prefix stehen.

Bin für jeden nur erdenklichen Tipp super dankbar
Schreibt bitte Vorschläge!
 
Zuletzt bearbeitet:

mage

Erfahrenes Mitglied
Die Übersetzung ist recht einfach zu machen, du schreibst dir einfach eine Funktion in der Form:
Code:
Private Function Translate( Kuerzel As String) As String
    
     Select Case Kuerzel
           Case "LIN"
               Return "Line item number"
           Case "QTY"
             ....
             ....
            Case Else
                Return Kuerzel 
     End Select

End Function
 

Norbert Eder

Erfahrenes Mitglied
Ich persönlich würde das in ein XML-File auslagern, da derartige Dinge nicht unbedingt in den Code gehören bzw. dies zwecks späterer Änderungen nicht wirklich Sinn macht.

Aufbau könnte in etwa so aussehen:
Code:
<editaglist>
  <tag short="LIN">Line item number</tag>
  ...
</editaglist>
Zugriff darauf geht eigentlich ganz einfach. Dazu muss der Namespace System.Xml eingebunden werden.
Code:
public string GetDescriptionFromTag(string tag) {
  XmlDocument doc = new XmlDocument();
  doc.Load("C:\\mytaglist.xml");
  XmlNode xn = doc.SelectSingleNode("/editaglist/tag[@short='" + tag + "']");
  if (xn != null)
    return xn.InnerText;
  else
    return "not found";
}
Ist jetzt frei geschrieben, mag also eventuell einen Fehler enthalten. Diese Variante hat allerdings den Vorteil, dass Änderungen im XML-File gemacht werden können und dafür nicht jedes Mal eine Neukompilierung ansteht.
 

Vamp7771

Mitglied
Erst einmal, vielen Dank für die Translationstipps! Das hat mich nun wieder viel weiter gebracht als ich zuvor war.
Irgendwie muss ich mir die Programmierdenkweiße angewöhnen, denn ich denke immer zu kompliziert.

@ Norbert, ich werde versuchen dies so umzusetzen, da es zur Übersichtlichkeit im Programm und ich denke auch zur Schnelligkeit in der Ausführung wesentlich beiträgt.

Ich muss mich jedoch an die Vorgaben vom Chef halten, falls er dies nicht möchte (aus welchem Grund auch immer) nehme ich die Variante im Post zuvor.

Vielen dank Jungs! Ihr seit echt SUPER!
 
Zuletzt bearbeitet:

Vamp7771

Mitglied
Du hast im Grunde recht, nur würde er mir nichts vorschreiben, hätte ich die längst mit SQL gemacht, denn ich hatte 3 Jahre SQL und kenne mich recht gut damit aus.
Aber ich muss es mit einem Programm schreiben, welches in Spanien auf einem Rechner mit Framework.1.1 ebenso läuft wie in Amerika, mein Chef ist altmodisch und möchte reinen Code. Ich machs aber dennoch so wie du es mir empfohlen hast, denn das ist wirklich besser.

Brauche ich spezielle Verweise auf XML?

MfG
Vamp
 

mage

Erfahrenes Mitglied
Für XML kannst du den Namesraum einbinden: Imports System.XML

Das Projekt ist auch nicht für SQL geeignet. SQL ist gedacht für die Datenhaltung. Sprich Daten orgranisiert abzulegen, schnell zu finden und organisiert abzurufen.

Was du hier gerade machst ist eine Datenanalyse bzw. (Format)Konvertierung, dazu sind "normale" Programmiersprachen besser geeignet.

Im übrigen solltest du unbedingt darauf achten, was du für Bespieldaten postest.
Ich hab gesehen in einem waren es Musterdaten, in einem anderen deiner Beiträge sieht es eher nicht so aus. Also am besten überprüfst du deine Beiträge nocheinmal und anonymisierst sie ggf. Das könnte sonst rechtliche Folgen für dich und dein Unternehmen haben.
 
Zuletzt bearbeitet: