Eine begrenzte sequentielle Datei erstellen

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.


Nach oben

x
Syntax: Eine begrenzte sequentielle Datei erstellen
ON TABLE {HOLD|PCHOLD} [AS filename] FORMAT DFIX
 DELIMITER delimiter 
 [ENCLOSURE enclosure] [HEADER {YES|NO}]
 [PRESERVESPACE {YES|NO}]  [RDELIMITER rdelimiter]

Hierbei gilt:

filename
Ist der Name der Datei, die erstellt werden soll. Wenn Sie keinen Namen angeben, ist HOLD der Defaultname.
Trennzeichen

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).

Umschließung

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.)

HEADER {YES|NO}
Gibt an, ob ein Kopfzeilendatensatz aufgenommen werden soll, der die Namen der Felder enthält, die sich in der durch die Anfrage erzeugten begrenzten sequentiellen Datei befinden.
PRESERVESPACE {YES|NO}

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.

rdelimiter

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.


Nach oben

x
Referenz: Verwendungshinweise für HOLD FORMAT DFIX


Beispiel: Eine durch einen senkrechten Strich begrenzte Datei erstellen

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


Beispiel: Eine tabbegrenzte Datei erstellen

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, $


Beispiel: Eine begrenzte Datei erstellen, in der Leerstellen beibehalten werden

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


Beispiel: Angabe eines Datensatz-Delimiters

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',$


Beispiel: Fehlende Daten in der HOLD-Datei

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