Création d'un fichier séquentiel délimité

Comment :

Référence :

Vous pouvez utiliser la commande HOLF FORMAT DFIX pour créer un fichier séquentiel alphanumérique avec toute sorte de caractère ou combinaison de caractères. Vous pouvez également spécifier si vous souhaitez mettre les valeurs alphanumériques entre guillemets ou autre encadrement, si vous souhaitez inclure un enregistrement d'en-tête qui répertorie les noms des champs, et s'il faut conserver les espaces vides de début et de fin dans les données alphanumériques, et s'il faut insérer un délimiteur entre les enregistrements dans le fichier résultant. (Notez que quand RDELIMITER est inclus, le RECFM est UB).

Un fichier maître et un fichier Access sont créés pour décrire le fichier séquentiel délimité qui est généré. La valeur SUFFIX dans le fichier maître est DFIX. Le fichier d'accès spécifie le délimiteur, le caractère d'encadrement (le cas échéant), s'il faut conserver les espaces vides de début et de fin dans les données alphanumériques, s'il existe un enregistrement d'en-tête, et le délimiteur d'enregistrements. Les fichiers maître et d'accès vous sont utiles si vous projetez de lire le fichier séquentiel à l'aide de WebFOCUS.


Haut de page

x
Syntaxe : Créer un fichier séquentiel délimité
ON TABLE {HOLD|PCHOLD} [AS filename] FORMAT DFIX
 DELIMITER delimiter 
 [ENCLOSURE enclosure] [HEADER {YES|NO}]
 [PRESERVESPACE {YES|NO}]  [RDELIMITER rdelimiter]

où :

filename
est le nom du fichier à créer. Si vous ne spécifiez pas de nom, le nom par défaut est HOLD.
séparateur

Est la séquence de délimitation comprenant jusqu'à 30 caractères non-imprimables ou non nuls. Cela représente la sémantique des caractères. Par exemple, si vous utilisez des caractères DBCS, le délimiteur peut s'élever jusqu'à 60 octets). Les caractères pourraient être aussi représentés avec leurs valeurs 0x hex qui est la méthode de spécification requise pour les caractère non imprimables. Si vous utilisez un mélange de caractères imprimables et non imprimables, vous devez tous les entrer comme valeurs hexadécimales. Pour créer un onglet de fichier délimité, vous pouvez spécifier la valeur du délimiteur comme TAB ou comme sa valeur hexadécimale équivalente (les plate-formes 0x09 sur ASCII ou les plate-formes 0x05 sur EBCDIC). Pour créer un fichier délimité par guillemets simples, vous devez obligatoirement spécifier la valeur guillemet simple DELIMITER avec sa valeur hexadécimale équivalente (0x27 sur plate-forme ASCII ou 0x7D sur plate-forme EBCDIC), sinon, la requête ne sera pas correctement interprétée et résultera en un fichier HOLD inutilisable.

délimitation

Est la séquence de délimitation. Il peut y avoir jusqu'à quatre caractères imprimables ou non imprimables utilisés pour encadrer chaque valeur alphanumérique dans le fichier. Cela représente la sémantique des caractères. Par exemple, si vous utilisez des caractères DBCS, le délimiteur peut aller jusque 8 octets. La plupart de caractères alphanumériques peuvent être intégrés partiellement ou entièrement à la séquence de délimitation. Cependant, les chiffres numériques et les symboles utilisés en nombres, tel que le point (.), le signe plus (+), ou moins (-) ne peuvent être utilisées dans la séquence de délimitation. Notez également que pour spécifier un guillemet simple comme caractère de délimitation, vous devez entrer quatre guillemets simples consécutifs. Le délimiteur le plus courant est le guillemet double.

Si vous utilisez un mélange de caractères imprimables et non imprimables, vous devez tous les entrer comme valeurs hexadécimales. Pour les caractères imprimables, vous pouvez soit utiliser les caractères mêmes ou leurs équivalents hexadécimaux (par exemple, l'esperluette peut être interprétée comme le début d'un nom de variable plutôt que pour l'endrement.)

HEADER {YES|NO}
spécifie s'il faut inclure un en-tête d'enregistrement qui comprend les noms de champs dans le fichier séquentiel délimité généré par la requête.
PRESERVESPACE {YES|NO}

Indique s'il faut conserver les espaces vides de début et de fin dans les données alphanumériques. YES conserve les espaces vides de début et de fin. NO préserve uniquement les espaces vides de début et de fin inclus dans les caractères d'encadrement. La valeur par défaut est NO.

Remarque : PRESERVESPACE est remplacé par l'option ENCLOSURE. Par conséquent, veuillez exclure l'option d'encadrement afin que le réglage de PRESERVESPACE soit respecté.

rdelimiter

Est la séquence du délimiteur d'enregistrement comprenant jusqu'à 30 caractères non-imprimables ou non nuls. Cela représente la sémantique des caractères. Par exemple, si vous utilisez des caractères DBCS, le délimiteur peut s'élever jusqu'à 60 octets). Pour un caractère non imprimable, entrez la valeur hexadécimale qui représente le caractère. Si vous utilisez un mélange de caractères imprimables et non imprimables, vous devez tous les entrer comme valeurs hexadécimales. Pour les caractères imprimables, vous pouvez soit utiliser les caractères mêmes ou leurs équivalents hexadécimaux (par exemple, l'esperluette peut être interprétée comme le début d'un nom de variable plutôt que dans le cadre de la délimitation.) Pour créer un onglet de caractères en tant que délimiteur d'enregistrements, vous pouvez spécifier la valeur du délimiteur comme TAB ou comme sa valeur hexadécimale équivalente (les plate-formes 0x09 sur ASCII ou les plate-formes 0x05 sur EBCDIC). La virgule (,) n'est pas supportée en tant que délimiteur d'enregistrement.

Notez que les chiffres numériques et les symboles utilisés en nombres, tels que le point (.), le signe plus (+), ou moins (-) ne peut être utilisé dans la séquence de délimitation. Quand RDELIMITER est inclus, le RECFM est UB.


Haut de page

x
Référence : Notes d'utilisation pour HOLD FORMAT DFIX


Exemple : Création d'un fichier délimité Pipe

La requête suivante contre la source de données CENTORD crée un fichier séquentiel nommé PIPE1 avec des champs séparés par le caractère pipe (|). Les valeurs alphanumériques ne sont pas encadrées par des guillemets, il n'y a pas d'en-tête d'enregistrement.

TABLE FILE CENTORD                           
SUM QUANTITY LINEPRICE BY REGION BY YEAR  
ON TABLE HOLD AS PIPE1 FORMAT DFIX DELIMITER |
END

Le fichier maître PIPE1 spécifie la valeur SUFFIX comme DFIX :

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

Le fichier Access PIPE1 spécifie le délimiteur :

SEGNAME=PIPE1, DELIMITER=|, HEADER=NO, $

Le fichier séquentiel PIPE1 comprend les données suivantes. Chaque valeur de données est séparée de la prochaine valeur par un caractère pipe :

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

La version suivante de la commande HOLD spécifie à la fois le délimiteur et un caractère de délimitation (“) :

ON TABLE HOLD AS PIPE1 FORMAT DFIX DELIMITER | ENCLOSURE "

Le fichier maître demeure le même, mais le fichier Access spécifie maintenant le caractère de délimitation :

SEGNAME=PIPE1, DELIMITER=|, ENCLOSURE=", HEADER=NO, $

Dans le fichier délimité qui est créé, chaque valeur de données est séparée de la suivante par un caractère pipe, et les valeurs aphanumériques sont délimitées par des guillemets doubles :

"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

Cette version de la commande HOLD ajoute un en-tête d'enregistrement au fichier généré :

ON TABLE HOLD AS PIPE1 FORMAT DFIX DELIMITER |  ENCLOSURE "  HEADER YES

Le fichier maître demeure le même, mais le fichier Access spécifie maintenant que le fichier séquentiel généré doit comprendre un en-tête d'enregistrement avec des noms de colonne comme son premier enregistrement :

SEGNAME=PIPE1, DELIMITER=|, ENCLOSURE=", HEADER=YES, $

Dans le fichier délimité qui est créé, chaque valeur de données est séparée de la suivante par un caractère pipe, et les valeurs aphanumériques sont délimitées par des guillemets doubles : Le premier enregistrement comprend des noms de colonne :

"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


Exemple : Création d'un fichier d'onglet délimité

La requête suivante contre la source de données CENTORD crée un fichier séquentiel nommé TAB1 avec des champs séparés par un caractère d'onglet :

TABLE FILE CENTORD                              
SUM QUANTITY LINEPRICE BY REGION BY YEAR     
ON TABLE HOLD AS TAB1 FORMAT DFIX DELIMITER TAB
END

Comme le caractère d'onglet n'est pas imprimable, le fichier Access TAB1 spécifie le délimiteur à l'aide de sa valeur hexadécimale.

L'élément suivant est le fichier Access dans un environnement EBCDIC :

SEGNAME=TAB1, DELIMITER=0x05, HEADER=NO, $

L'élément suivant est le fichier Access dans un environnement ASCII :

SEGNAME=TAB1, DELIMITER=0x09, HEADER=NO, $


Exemple : Créer un fichier délimité par des espaces vides préservés

La requête suivante contre la source de données GGSALES crée un fichier délimité par des virgules. Les données alphanumériques d'origine contiennent des espace vide de fin. L'option PRESERVESPACE YES dans la commande HOLD préserve ces espaces vides de fin :

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

Le fichier maître suivant est généré :

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

Le fichier d'accès suivant est généré :

SEGNAME=DFIX1, DELIMITER=',', HEADER=NO, PRESERVESPACE=YES, $

Dans le fichier DFIX1, les champs alphanumériques contiennent tous les espaces vides qui existaient dans le fichier d'origine :

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

La création du même fichier avec PRESERVESPACE NO supprime les espaces vides de fin :

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


Exemple : Spécification d'un délimiteur d'enregistrement

La requête suivante sur la source de données GGSALES, le délimiteur de champ est une virgule, le caractère d'encadrement et un simple guillemet, et le délimiteur d'enregistrements consiste en la combinaison de caractères non imprimables et imprimables, de façon à le spécifier avec la séquence hexadécimale suivant :

TABLE FILE GGSALES   
PRINT DOLLARS UNITS CATEGORY REGION
ON TABLE HOLD AS RDELIM1 FORMAT DFIX DELIMITER , ENCLOSURE ''''   
HEADER NO RDELIMITER 0x2C240D0A   
END 

Le fichier maître généré suit :

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

Le fichier d'accès contient les caractères délimiteurs et d'encadrement :

SEGNAME=RDELIM1, 
  DELIMITER=',', 
  ENCLOSURE='''', 
  HEADER=NO, 
  RDELIMITER=0x2C240D0A, 
  PRESERVESPACE=NO, $

Chaque ligne du fichier DFIX résultant se termine avec la combinaison, virgule-dollar , un retour chariot et un espace de ligne. une liste partielle suit :

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


Exemple : Données manquantes dans le fichier HOLD

La requête suivante contre la source de données CENTORD crée des valeurs alphanumériques et numériques manquantes dans le fichier HOLD délimité par une virgule :

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

Dans le fichier MISS1 HOLD, les valeurs alphanumériques sont indiquées par deux caractères de délimitation dans une ligne (““) et les valeurs numériques manquantes sont indiquées par deux délimiteurs dans une ligne (,,) :

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