tutorials.de Buch-Aktion 05/2012
Seite 1 von 3 123 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
39
ZUGRIFFE
2861
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Vamp7771 Vamp7771 ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Ort
    Nähe Karlsruhe
    Beiträge
    75
    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 :
    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
    
     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!
    Geändert von Vamp7771 (17.11.05 um 10:18 Uhr)
     

  2. #2
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    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.
     

  3. #3
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Ist das nicht EDIFACT?

    gruss Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  4. #4
    Vamp7771 Vamp7771 ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Ort
    Nähe Karlsruhe
    Beiträge
    75
    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
    Geändert von Vamp7771 (13.11.05 um 23:43 Uhr)
     

  5. #5
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    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
     

  6. #6
    Avatar von SixDark
    SixDark SixDark ist offline Mitglied Brokat
    Registriert seit
    Nov 2002
    Ort
    British Virgin Islands
    Beiträge
    424
    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::..
     

  7. #7
    Vamp7771 Vamp7771 ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Ort
    Nähe Karlsruhe
    Beiträge
    75
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
      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))
            [B]TextSchreiben.Write(System.Text.RegularExpressions.Regex.Replace(Textlesen.ReadToEnd, "+", "_"))[/B] '[I] 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?[/I]
            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
     

  8. #8
    Avatar von SixDark
    SixDark SixDark ist offline Mitglied Brokat
    Registriert seit
    Nov 2002
    Ort
    British Virgin Islands
    Beiträge
    424
    Hi!

    Code :
    1
    2
    
    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::..
    Geändert von SixDark (14.11.05 um 11:04 Uhr)
     

  9. #9
    Vamp7771 Vamp7771 ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Ort
    Nähe Karlsruhe
    Beiträge
    75
    Hm, habe es eben versucht, aber sobald ich das durchführe wird das Programm wieder superlangsam.

    (Hier der Code)


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
     
    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
    Geändert von Vamp7771 (14.11.05 um 13:13 Uhr)
     

  10. #10
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Schau doch mal hier:
    http://www.codeproject.com/csharp/EDIX.asp

    gruss Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  11. #11
    Vamp7771 Vamp7771 ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Ort
    Nähe Karlsruhe
    Beiträge
    75
    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
     

  12. #12
    Avatar von JensG
    JensG JensG ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Gera (Thüringen)
    Beiträge
    517
    Hallo Vamp,

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

    Jens
     

  13. #13
    Vamp7771 Vamp7771 ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Ort
    Nähe Karlsruhe
    Beiträge
    75
    Vielen Dank für den Tipp mit den eckigen Klammern!
    Damit hat es funktioniert!

    Dank euch, habe ich nun den Text soweit sortiert:

    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
    
    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 :
    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
    47
    48
    
       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
    Geändert von Vamp7771 (15.11.05 um 10:50 Uhr)
     

  14. #14
    Vamp7771 Vamp7771 ist offline Mitglied Silber
    Registriert seit
    Oct 2005
    Ort
    Nähe Karlsruhe
    Beiträge
    75
    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 :
    1
    
    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!
    Geändert von Vamp7771 (17.11.05 um 10:17 Uhr)
     

  15. #15
    Avatar von mage
    mage mage ist offline Mitglied Platin
    Registriert seit
    May 2002
    Ort
    Berliner Speckgürtel
    Beiträge
    707
    Die Übersetzung ist recht einfach zu machen, du schreibst dir einfach eine Funktion in der Form:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    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
     
    Allen ist das Denken erlaubt, vielen bleibt es erspart. (Kurt Goetz)

Ähnliche Themen

  1. WIe muss ich das machen?
    Von wingman im Forum PHP
    Antworten: 14
    Letzter Beitrag: 27.07.04, 17:39
  2. Wie kann man sowas machen?
    Von Kopfballstar im Forum Photoshop
    Antworten: 4
    Letzter Beitrag: 12.07.04, 16:27
  3. was muss ich machen?
    Von Private Joker im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 26.06.04, 12:23
  4. Texturen von Steinen oder Marmor oder sowas?
    Von LordXtra im Forum Photoshop
    Antworten: 2
    Letzter Beitrag: 26.06.01, 15:43