Vorgehensweise: Referenz: |
Sie können den Befehl HOLD FORMAT DFIX verwenden, um eine alphanumerische sequentielle Datei zu erstellen, die durch ein beliebiges Zeichen oder eine Kombination von Zeichen begrenzt wird. Sie können auch angeben, ob die alphanumerischen Werte in Anführungszeichen gesetzt oder anders eingeschlossen werden sollen. Oder, ob ein Kopfzeilendatensatz aufgenommen werden soll, der die Namen der Felder auflistet. Oder, ob vorangestellte und nachgestellte Leerzeichen in alphanumerischen Daten beibehalten werden sollen. Oder, ob ein Begrenzungszeichen zwischen Einträgen in der Datei eingefügt werden soll, die entsteht. (Beachten Sie bitte, dass RECFM gleich UB ist, wenn RDELIMITER enthalten ist).
Es werden eine Masterdatei und eine Zugriffsdatei erstellt, um die begrenzte sequentielle Datei zu beschreiben, die erzeugt wird. Der SUFFIX-Wert in der Masterdatei ist DFIX. Die Zugriffsdatei gibt das Trennzeichen an, das Umschließungszeichen (falls zutreffend), ob vorangestellte und nachgestellte Leerzeichen in alphanumerischen Daten beibehalten werden sollen, und ob es einen Kopfzeilendatensatz gibt. Außerdem wird das Eintrags-Begrenzungszeichen definiert, falls es eins geben soll. Die Master- und Zugriffsdateien sind hilfreich, wenn Sie später die sequentielle Datei mit WebFOCUS lesen.
ON TABLE {HOLD|PCHOLD} [AS filename] FORMAT DFIX DELIMITER delimiter [ENCLOSURE enclosure] [HEADER {YES|NO}] [PRESERVESPACE {YES|NO}] [RDELIMITER rdelimiter]
Hierbei gilt:
Ist die Trennzeichenfolge, die aus bis zu 30 Nicht-Null-Zeichen besteht, die entweder gedruckt oder nicht gedruckt werden können. Dies steht für Zeichensemantik. Wenn Sie beispielsweise DBCS-Zeichen verwenden, kann das Trennzeichen bis zu 60 Bytes haben. Geben Sie für ein Zeichen, das nicht gedruckt werden kann, den Hexadezimalwert ein, der für das Zeichen steht. Wenn Sie sowohl Zeichen verwenden, die gedruckt werden können, als auch solche, die nicht gedruckt werden können, müssen Sie sie alle als Hexadezimalwerte eingeben. Für Zeichen, die gedruckt werden können, können Sie entweder die Zeichen selbst verwenden oder ihre hexadezimale Entsprechungen (z. B. kann das Ampersand interpretiert werden als der Anfang eines Variablennamens statt als Teil des Trennzeichens). Um eine tabbegrenzte Datei zu erstellen, können Sie den Trennzeichenwert als TAB angeben oder als Hexadezimalwert (0x09 auf ASCII-Plattformen oder 0x05 auf EBCDIC-Plattformen).
Ist die Umschließungsfolge. Sie kann aus bis zu vier Zeichen bestehen, die gedruckt oder nicht gedruckt werden können, um jeden alphanumerischen Wert in der Datei zu umschließen. Dies steht für Zeichensemantik. Wenn Sie beispielsweise DBCS-Zeichen verwenden, kann die Umschließung bis zu 8 Bytes haben. Die meisten alphanumerischen Zeichen können für die gesamte oder als Teil der Umschließungsfolge verwendet werden. Es können jedoch numerische Ziffern und Symbole, die in Zahlen verwendet werden, wie z. B. ein Punkt (.), ein Pluszeichen (+) oder ein Minuszeichen (-), in der Umschließungsfolge nicht verwendet werden. Beachten Sie auch, dass Sie vier aufeinanderfolgende einfache Anführungszeichen eingeben müssen, um ein einfaches Anführungszeichen als Umschließungszeichen anzugeben. Die üblichste Umschließung ist ein doppeltes Anführungszeichen.
Wenn Sie sowohl Zeichen verwenden, die gedruckt werden können, als auch solche, die nicht gedruckt werden können, müssen Sie sie alle als Hexadezimalwerte eingeben. Für Zeichen, die gedruckt werden können, können Sie entweder die Zeichen selbst verwenden oder ihre hexadezimale Entsprechungen (z. B. kann das Ampersand interpretiert werden als der Anfang eines Variablennamens statt als Teil der Umschließung.)
Gibt an, ob vorangestellte und nachgestellte Leerzeichen in alphanumerischen Daten beibehalten werden sollen. YES behält vorangestellte und nachgestellte Leerzeichen bei. NO behält nur vorangestellte und nachgestellte Leerzeichen bei, die sich innerhalb der Umschließungszeichen befinden. NO ist der Defaultwert.
Hinweis: PRESERVESPACE wird überschrieben von der Option ENCLOSURE. Schließen Sie daher die Umschließungsoption aus, wenn Sie möchten, dass die Einstellung PRESERVESPACE beachtet wird.
Ist der Datensatz-Delimeter, der aus bis zu 30 Nicht-Null-Zeichen besteht, die entweder gedruckt oder nicht gedruckt werden können. Dies steht für Zeichensemantik. Wenn Sie beispielsweise DBCS-Zeichen verwenden, kann das Trennzeichen bis zu 60 Bytes haben. Geben Sie für ein Zeichen, das nicht gedruckt werden kann, den Hexadezimalwert ein, der für das Zeichen steht. Wenn Sie sowohl Zeichen verwenden, die gedruckt werden können, als auch solche, die nicht gedruckt werden können, müssen Sie sie alle als Hexadezimalwerte eingeben. Für Zeichen, die gedruckt werden können, können Sie entweder die Zeichen selbst verwenden oder ihre hexadezimale Entsprechungen (z. B. kann das Ampersand interpretiert werden als der Anfang eines Variablennamens statt als Teil des Trennzeichens). Um ein Tabstoppzeichen als Datensatz-Delimiter zu verwenden, können Sie den Trennzeichenwert als TAB angeben oder als Hexadezimalwert (0x09 auf ASCII-Plattformen oder 0x05 auf EBCDIC-Plattformen). Das Komma (,) wird nicht als Datensatz-Delimiter unterstützt.
Beachten Sie, dass numerische Ziffern und Symbole, die in Zahlen verwendet werden, wie z. B. ein Punkt (.), ein Pluszeichen (+) oder ein Minuszeichen (-), in der Trennzeichenfolge nicht verwendet werden können. RECFM ist gleich UB, wenn RDELIMITER enthalten ist.
Die folgende Anfrage mit der CENTORD-Datenquelle erstellt eine sequentielle Datei namens PIPE1, in der Felder durch senkrechte Striche (|) getrennt sind. Alphanumerische Zeichen werden nicht in Anführungszeichen gesetzt und es gibt keinen Kopfzeilendatensatz:
TABLE FILE CENTORD SUM QUANTITY LINEPRICE BY REGION BY YEAR ON TABLE HOLD AS PIPE1 FORMAT DFIX DELIMITER | END
Die PIPE1-Masterdatei gibt den Wert SUFFIX als DFIX an:
FILENAME=PIPE1 , SUFFIX=DFIX , $ SEGMENT=PIPE1, SEGTYPE=S2, $ FIELDNAME=REGION, ALIAS=E01, USAGE=A5, ACTUAL=A05, $ FIELDNAME=YEAR, ALIAS=E02, USAGE=YY, ACTUAL=A04, $ FIELDNAME=QUANTITY, ALIAS=E03, USAGE=I8C, ACTUAL=A08, $ FIELDNAME=LINEPRICE, ALIAS=E04, USAGE=D12.2MC, ACTUAL=A12, $
Die PIPE1-Zugriffsdatei gibt das Trennzeichen an:
SEGNAME=PIPE1, DELIMITER=|, HEADER=NO, $
Die sequentielle Datei PIPE1 enthält die folgenden Daten. Jeder Datenwert wird vom nächsten Wert durch einen senkrechten Strich getrennt:
EAST|2000|3907|1145655.77 EAST|2001|495922|127004359.88 EAST|2002|543678|137470917.05 NORTH|2001|337168|85750735.54 NORTH|2002|370031|92609802.80 SOUTH|2000|3141|852550.45 SOUTH|2001|393155|99822662.88 SOUTH|2002|431575|107858412.0 WEST|2001|155252|39167974.18 WEST|2002|170421|42339953.45
Die folgende Version des HOLD-Befehls gibt sowohl das Trennzeichen als auch ein Umschließungszeichen (“) an:
ON TABLE HOLD AS PIPE1 FORMAT DFIX DELIMITER | ENCLOSURE "
Die Masterdatei bleibt gleich, aber die Zugriffsdatei gibt jetzt das Umschließungszeichen an:
SEGNAME=PIPE1, DELIMITER=|, ENCLOSURE=", HEADER=NO, $
In der begrenzten Datei, die erstellt wird, wird jeder Datenwert vom nächsten durch einen senkrechten Strich abgetrennt, und alphanumerische Werte werden in doppelte Anführungzeichen gesetzt:
"EAST"|2000|3907|1145655.77 "EAST"|2001|495922|127004359.88 "EAST"|2002|543678|137470917.05 "NORTH"|2001|337168|85750735.54 "NORTH"|2002|370031|92609802.80 "SOUTH"|2000|3141|852550.45 "SOUTH"|2001|393155|99822662.88 "SOUTH"|2002|431575|107858412.01 "WEST"|2001|155252|39167974.18 "WEST"|2002|170421|42339953.45
Diese Version des HOLD-Befehls fügt der erzeugten Datei einen Kopfzeilendatensatz hinzu:
ON TABLE HOLD AS PIPE1 FORMAT DFIX DELIMITER | ENCLOSURE " HEADER YES
Die Masterdatei bleibt gleich, aber die Zugriffsdatei gibt jetzt an, dass die erzeugte sequentielle Datei einen Kopfzeilendatensatz mit Spaltennamen als ersten Datensatz enthalten sollte:
SEGNAME=PIPE1, DELIMITER=|, ENCLOSURE=", HEADER=YES, $
In der begrenzten Datei, die erstellt wird, wird jeder Datenwert vom nächsten durch einen senkrechten Strich abgetrennt, und alphanumerische Werte werden in doppelte Anführungzeichen gesetzt. Der erste Datensatz enthält die Spaltennamen:
"REGION"|"YEAR"|"QUANTITY"|"LINEPRICE" "EAST"|2000|3907|1145655.77 "EAST"|2001|495922|127004359.88 "EAST"|2002|543678|137470917.05 "NORTH"|2001|337168|85750735.54 "NORTH"|2002|370031|92609802.80 "SOUTH"|2000|3141|852550.45 "SOUTH"|2001|393155|99822662.88 "SOUTH"|2002|431575|107858412.01 "WEST"|2001|155252|39167974.18 "WEST"|2002|170421|42339953.45
Die folgende Anfrage mit der CENTORD-Datenquelle erstellt eine sequentielle Datei namens TAB1, in der Felder durch Tabstoppzeichen getrennt sind.
TABLE FILE CENTORD SUM QUANTITY LINEPRICE BY REGION BY YEAR ON TABLE HOLD AS TAB1 FORMAT DFIX DELIMITER TAB END
Da das Tabstoppzeichen nicht gedruckt werden kann, gibt die Zugriffsdatei TAB1 das Trennzeichen mit seinem Hexadezimalwert an.
Nachfolgend sehen Sie die Zugriffsdatei in einer EBCDIC-Umgebung:
SEGNAME=TAB1, DELIMITER=0x05, HEADER=NO, $
Nachfolgend sehen Sie die Zugriffsdatei in einer ASCII-Umgebung:
SEGNAME=TAB1, DELIMITER=0x09, HEADER=NO, $
Die folgende Anfrage mit der Datenquelle GGSALES erstellt eine kommabegrenzte Datei. Die ursprünglichen alphanumerischen Daten haben nachgestellte Leerzeichen. Die Option PRESERVESPACE YES im HOLD-Befehl behält diese nachgestellten Leerzeichen bei:
APP HOLDDATA APP1 APP HOLDMETA APP1 TABLE FILE GGSALES SUM DOLLARS UNITS BY REGION BY CATEGORY BY PRODUCT ON TABLE HOLD AS DFIX1 FORMAT DFIX DELIMITER , PRESERVESPACE YES END
Es wird die folgende Masterdatei erzeugt:
FILENAME=DFIX1 , SUFFIX=DFIX , $ SEGMENT=DFIX1, SEGTYPE=S3, $ FIELDNAME=REGION, ALIAS=E01, USAGE=A11, ACTUAL=A11, $ FIELDNAME=CATEGORY, ALIAS=E02, USAGE=A11, ACTUAL=A11, $ FIELDNAME=PRODUCT, ALIAS=E03, USAGE=A16, ACTUAL=A16, $ FIELDNAME=DOLLARS, ALIAS=E04, USAGE=I08, ACTUAL=A08, $ FIELDNAME=UNITS, ALIAS=E05, USAGE=I08, ACTUAL=A08, $
Es wird die folgende Zugriffsdatei erzeugt:
SEGNAME=DFIX1, DELIMITER=',', HEADER=NO, PRESERVESPACE=YES, $
In der Datei DFIX1 enthalten die alphanumerischen Felder alle Leerzeichen, die in der ursprünglichen Datei vorhanden waren:
Midwest ,Coffee ,Espresso ,1294947,101154 Midwest ,Coffee ,Latte ,2883566,231623 Midwest ,Food ,Biscotti ,1091727,86105 Midwest ,Food ,Croissant ,1751124,139182 Midwest ,Food ,Scone ,1495420,116127 Midwest ,Gifts ,Coffee Grinder ,619154,50393 Midwest ,Gifts ,Coffee Pot ,599878,47156 Midwest ,Gifts ,Mug ,1086943,86718 Midwest ,Gifts ,Thermos ,577906,46587 Northeast ,Coffee ,Capuccino ,542095,44785 Northeast ,Coffee ,Espresso ,850107,68127 Northeast ,Coffee ,Latte ,2771815,222866 Northeast ,Food ,Biscotti ,1802005,145242 Northeast ,Food ,Croissant ,1670818,137394 Northeast ,Food ,Scone ,907171,70732 Northeast ,Gifts ,Coffee Grinder ,509200,40977 Northeast ,Gifts ,Coffee Pot ,590780,46185 Northeast ,Gifts ,Mug ,1144211,91497 Northeast ,Gifts ,Thermos ,604098,48870 Southeast ,Coffee ,Capuccino ,944000,73264 Southeast ,Coffee ,Espresso ,853572,68030 Southeast ,Coffee ,Latte ,2617836,209654 Southeast ,Food ,Biscotti ,1505717,119594 Southeast ,Food ,Croissant ,1902359,156456 Southeast ,Food ,Scone ,900655,73779 Southeast ,Gifts ,Coffee Grinder ,605777,47083 Southeast ,Gifts ,Coffee Pot ,645303,49922 Southeast ,Gifts ,Mug ,1102703,88474 Southeast ,Gifts ,Thermos ,632457,48976 West ,Coffee ,Capuccino ,895495,71168 West ,Coffee ,Espresso ,907617,71675 West ,Coffee ,Latte ,2670405,213920 West ,Food ,Biscotti ,863868,70436 West ,Food ,Croissant ,2425601,197022 West ,Food ,Scone ,912868,72776 West ,Gifts ,Coffee Grinder ,603436,48081 West ,Gifts ,Coffee Pot ,613624,47432 West ,Gifts ,Mug ,1188664,93881 West ,Gifts ,Thermos ,571368,45648
Wenn Sie dieselbe Datei mit PRESERVESPACE NO erstellen, werden die nachgestellten Leerzeichen entfernt:
Midwest,Coffee,Espresso,1294947,101154 Midwest,Coffee,Latte,2883566,231623 Midwest,Food,Biscotti,1091727,86105 Midwest,Food,Croissant,1751124,139182 Midwest,Food,Scone,1495420,116127 Midwest,Gifts,Coffee Grinder,619154,50393 Midwest,Gifts,Coffee Pot,599878,47156 Midwest,Gifts,Mug,1086943,86718 Midwest,Gifts,Thermos,577906,46587 Northeast,Coffee,Capuccino,542095,44785 Northeast,Coffee,Espresso,850107,68127 Northeast,Coffee,Latte,2771815,222866 Northeast,Food,Biscotti,1802005,145242 Northeast,Food,Croissant,1670818,137394 Northeast,Food,Scone,907171,70732 Northeast,Gifts,Coffee Grinder,509200,40977 Northeast,Gifts,Coffee Pot,590780,46185 Northeast,Gifts,Mug,1144211,91497 Northeast,Gifts,Thermos,604098,48870 Southeast,Coffee,Capuccino,944000,73264 Southeast,Coffee,Espresso,853572,68030 Southeast,Coffee,Latte,2617836,209654 Southeast,Food,Biscotti,1505717,119594 Southeast,Food,Croissant,1902359,156456 Southeast,Food,Scone,900655,73779 Southeast,Gifts,Coffee Grinder,605777,47083 Southeast,Gifts,Coffee Pot,645303,49922 Southeast,Gifts,Mug,1102703,88474 Southeast,Gifts,Thermos,632457,48976 West,Coffee,Capuccino,895495,71168 West,Coffee,Espresso,907617,71675 West,Coffee,Latte,2670405,213920 West,Food,Biscotti,863868,70436 West,Food,Croissant,2425601,197022 West,Food,Scone,912868,72776 West,Gifts,Coffee Grinder,603436,48081 West,Gifts,Coffee Pot,613624,47432 West,Gifts,Mug,1188664,93881 West,Gifts,Thermos,571368,45648
In der folgende Anfrage an die GGSALES-Datenquelle, ist das Feldtrennzeichen ein Komma, die Umschließung ein einfaches Anführungszeichen und der Datensatz-Delimiter besteht sowohl aus druckbaren wie auch nicht-druckbaren Zeichen, so das folgende hexadezimale Sequenz anzugeben ist.
TABLE FILE GGSALES PRINT DOLLARS UNITS CATEGORY REGION ON TABLE HOLD AS RDELIM1 FORMAT DFIX DELIMITER , ENCLOSURE '''' HEADER NO RDELIMITER 0x2C240D0A END
Die generierte Masterdatei folgt:
FILENAME=RDELIM1 , SUFFIX=DFIX , $ SEGMENT=RDELIM1, SEGTYPE=S0, $ FIELDNAME=DOLLARS, ALIAS=E01, USAGE=I08, ACTUAL=A08, $ FIELDNAME=UNITS, ALIAS=E02, USAGE=I08, ACTUAL=A08, $ FIELDNAME=CATEGORY, ALIAS=E03, USAGE=A11, ACTUAL=A11, $ FIELDNAME=REGION, ALIAS=E04, USAGE=A11, ACTUAL=A11, $
Der Zugriffsdatei enthält die Delimiters und Umschließungszeichen:
SEGNAME=RDELIM1, DELIMITER=',', ENCLOSURE='''', HEADER=NO, RDELIMITER=0x2C240D0A, PRESERVESPACE=NO, $
Jede Zeile der sich daraus ergebenden DFIX-Datei endet mit der Komma-Dollar-Kombination, einer Zeilenumschaltung und einem Zeilenabstand. Eine partielle Auflistung folgt:
20805,1387,'Coffee','Northeast',$ 20748,1729,'Coffee','Northeast',$ 20376,1698,'Coffee','Northeast',$ 20028,1669,'Coffee','Northeast',$ 19905,1327,'Coffee','Northeast',$ 19470,1770,'Coffee','Northeast',$ 19118,1738,'Coffee','Northeast',$ 18720,1560,'Coffee','Northeast',$ 18432,1536,'Coffee','Northeast',$ 17985,1199,'Coffee','Northeast',$ 17630,1763,'Coffee','Northeast',$ 16646,1189,'Coffee','Northeast',$ 15650,1565,'Coffee','Northeast',$ 15450,1545,'Coffee','Northeast',$ 15435,1029,'Coffee','Northeast',$ 14270,1427,'Coffee','Northeast',$
Die folgende Anfrage mit der CENTORD-Datenquelle erstellt fehlende alphanumerische und numerische Werte in der resultierenden kommabegrenzten HOLD-Datei:
DEFINE FILE CENTORD AREA/A5 MISSING ON = IF REGION EQ 'EAST' THEN MISSING ELSE REGION; MQUANTITY/I9 MISSING ON = IF REGION EQ 'WEST' THEN MISSING ELSE 200; END TABLE FILE CENTORD SUM QUANTITY MQUANTITY LINEPRICE BY AREA BY YEAR WHERE AREA NE 'NORTH' OR 'SOUTH' ON TABLE HOLD AS MISS1 FORMAT DFIX DELIMITER , ENCLOSURE " END
In der Datei MISS1 HOLD werden die fehlenden alphanumerischen Werte durch zwei aufeinanderfolgende Umschließungszeichen ("") und die fehlenden numerischen Werte durch zwei aufeinanderfolgende Trennzeichen (,,) angegeben:
"",2000,3907,600,1145655.77 "",2001,495922,343000,127004359.88 "",2002,543678,343000,137470917.05 "WEST",2001,155252,,39167974.18 "WEST",2002,170421,,42339953.45
WebFOCUS |