ERLEDIGT
NEIN
NEIN
ANTWORTEN
39
39
ZUGRIFFE
2861
2861
EMPFEHLEN
-
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)
-
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.
-
13.11.05 22:40 #3
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Ist das nicht EDIFACT?
gruss TomJava 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
-
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 @ AllGeändert von Vamp7771 (13.11.05 um 23:43 Uhr)
-
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
-
14.11.05 09:24 #6
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::..
-
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
-
14.11.05 11:01 #8
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)
-
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ß VampGeändert von Vamp7771 (14.11.05 um 13:13 Uhr)
-
14.11.05 13:22 #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 TomJava 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
-
14.11.05 21:18 #11
- 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
-
15.11.05 09:48 #12
Hallo Vamp,
setze das Pluszeichen im Ausdruck mal in eckige Klammern, dann sollte es funktionieren.
"[+]"
Jens
-
15.11.05 10:47 #13
- 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)
-
15.11.05 15:57 #14
- 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)
-
16.11.05 10:14 #15
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
-
WIe muss ich das machen?
Von wingman im Forum PHPAntworten: 14Letzter Beitrag: 27.07.04, 17:39 -
Wie kann man sowas machen?
Von Kopfballstar im Forum PhotoshopAntworten: 4Letzter Beitrag: 12.07.04, 16:27 -
was muss ich machen?
Von Private Joker im Forum Sonstige SprachenAntworten: 2Letzter Beitrag: 26.06.04, 12:23 -
Texturen von Steinen oder Marmor oder sowas?
Von LordXtra im Forum PhotoshopAntworten: 2Letzter Beitrag: 26.06.01, 15:43





Zitieren

Login





