PDA

View Full Version : CPYFRMSTMF für DESADV-Datei



gogocdb
20-03-07, 06:56
Hallo,
ich erhalte eine EDIFACT-Datei (DESADV), die zur Trennung der einzelnen Segmente kein WRZL enthält.
Ich benutze CPYFRMSTMF mit ENDLINFMT(*FIXED) um in eine Datenbankdatei zu kopieren.
Nun möchte ich aber zur besseren Lesbarkeit der Daten beim CPYFRMSTMF gleich einen Satz pro Segment erzeugen.
Der "Satzbegrenzer " ist das Hochkomma (X"7D").
Geht das ?

Azaron
28-03-07, 11:02
Hallo,

hast du es schon mal mit dem Befehl CPYFRMIMPF probiert?
Damit kannst du auch einen sog. Satztrenner angeben.

gogocdb
29-03-07, 14:20
Hallo Azaron,
der Tip mit CPYFRMIMPF ist gut, aber ich scheidere bisher mit meinen Versuchen.
Wie muss ich im Parameter RCDDLM angeben, dass mein Satztrenner das Hochkomma (HEX 7D) ist.
Weder X'7D' noch ''' helfen mir.

plinzen
29-03-07, 15:59
Du verwechselst aber nicht den Parameter RCDDLM mit dem Parameter STRDLM?

Wir verarbeiten auch EDI-Daten, allerdings hatten wir noch kein Format bei dem eine Zeile mit dem Hochkomma beendet wurde.
Eine Beispiel vom Aufbau wäre zur Problemlösung sicher hilfreich.

gogocdb
30-03-07, 07:04
An einem Beispiel kann man das wirklich besser erklären :
UNB+UNOC:3+4015792000004:14+4314392000002:14+07031 2:1523+00000000000014+++++EANCOM+1'UNH+0000000001+ DESADV:D:96A:UN:EAN005'BGM+351
0070312:102'RFF+DQ:2555'DTM+2:20070313:102'NAD+BY+ 4314392963840::9'NAD+DP+4314392000002::9'NAD+SU+40 15792000004::9'CPS+1'LIN+1++44
2::PCE'LIN+2++4400016501366:EN'QTY+12::PCE'LIN+3++ 4400016505340:EN'QTY+12::PCE'LIN+4++4015792058500: EN'QTY+12::PCE'LIN+5++44000165
'LIN+6++4400016505524:EN'QTY+12::PCE'LIN+7++440001 6510146:EN'QTY+12::PCE'LIN+8++4400016510214:EN'QTY +12::PCE'LIN+9++4400016510221:
0++4400016501601:EN'QTY+12::PCE'CNT+2:10'UNT+31+00 00000001'UNH+0000000002+DESADV:D:96A:UN:EAN005'BGM +351::9+2556+9'DTM+137:2007031
M+2:20070313:102'NAD+BY+4314392963918::9'NAD+DP+43 14392000002::9'NAD+SU+4015792000004::9'CPS+1'LIN+1 ++4400016500307:EN'QTY+12::PCE
3:EN'QTY+12::PCE'LIN+3++4400016502035:EN'QTY+12::P CE'LIN+4++4400016502042:EN'QTY+12::PCE'LIN+5++4400 016500314:EN'QTY+12::PCE'LIN+6
TY+12::PCE'LIN+7++4400016500598:EN'QTY+12::PCE'LIN +8++4400016502141:EN'QTY+12::PCE'LIN+9++4400016502 578:EN'QTY+12::PCE'LIN+10++440
::PCE'LIN+11++4015792211035:EN'QTY+12::PCE'LIN+12+ +4015792211028:EN'QTY+12::PCE'LIN+13++401579221109 7:EN'QTY+12::PCE'LIN+14++40157
PCE'LIN+15++4015792050252:EN'QTY+12::PCE'CNT+2:15' UNT+41+0000000002'UNZ+2+00000000000014'
****** DATENENDE ******
Warum jetzt in der Datei die Smileys stehen , weiß ich nicht.
Dort steht in der Datei ein Doppelpunkt und ein D !
Ich möchte die Segmente (UNB, UNH, BGM ...) in je 1 Datensatz haben .
Das Trennzeichen zwischen den Segmenten ist das Hochkomma.
Ein Feldtrennzeichen gibt es nicht.

KM
30-03-07, 07:42
Wir verarbeiten auch EDI-Daten, allerdings hatten wir noch kein Format bei dem eine Zeile mit dem Hochkomma beendet wurde.

Jedes Segment wird bei EDI mit einem Hochkomma beendet. Wahrscheinlich habt Ihr einen Konverter, der das bereits herausfiltert.

Ich denke auch, dass das weder mit CPYFRMIMPF noch mit CPYFRMSTMF zu lösen ist. Beim CPYFRMIMPF kann man kein Hochkomma als Satzbegrenzer angeben. Man könnte bestenfalls die Textdatei per CPYFRMSTMF als einen langen Datensatz in eine physische Datei kopieren und diesen Satz dann mit SCAN- und SUBST-Befehlen zerlegen und weiterverarbeiten.

Am besten benutzt Du gleich die entsprechenden IFS-APIs und schreibst Dir ein kleines Programm dafür, das das erledigt. Dann kannst Du Dir den CPYFRMSTMF sparen.

Gruß,
KM

BenderD
30-03-07, 08:20
Hallo,

da gibt es ein Serviceprogramm INSTREAM auf meiner Open Source Seite, das hat eine Prozedur readLine, die man leicht auf einstellbare Delimiter erweitern könnte.

mfg

Dieter Bender


Jedes Segment wird bei EDI mit einem Hochkomma beendet. Wahrscheinlich habt Ihr einen Konverter, der das bereits herausfiltert.

Ich denke auch, dass das weder mit CPYFRMIMPF noch mit CPYFRMSTMF zu lösen ist. Beim CPYFRMIMPF kann man kein Hochkomma als Satzbegrenzer angeben. Man könnte bestenfalls die Textdatei per CPYFRMSTMF als einen langen Datensatz in eine physische Datei kopieren und diesen Satz dann mit SCAN- und SUBST-Befehlen zerlegen und weiterverarbeiten.

Am besten benutzt Du gleich die entsprechenden IFS-APIs und schreibst Dir ein kleines Programm dafür, das das erledigt. Dann kannst Du Dir den CPYFRMSTMF sparen.

Gruß,
KM

plinzen
30-03-07, 11:52
Stimmt, erledigt bei uns wahrscheinlich einer der Konverter. Ein Glück! :p