la concaténation inconnu chaînes de longueur en COBOL
Question
Comment concaténer deux chaînes de caractères, de longueur inconnue, en COBOL?Ainsi, par exemple:
WORKING-STORAGE.
FIRST-NAME PIC X(15) VALUE SPACES.
LAST-NAME PIC X(15) VALUE SPACES.
FULL-NAME PIC X(31) VALUE SPACES.
Si FIRST-NAME = 'JOHN '
et LAST-NAME = 'DOE '
, comment puis-je obtenir:
FULL-NAME = 'JOHN DOE '
par opposition à:
FULL-NAME = 'JOHN DOE '
La solution
Je crois que ce qui suit va vous donner ce que vous désirez.
STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.
Autres conseils
À première vue, la solution est d'utiliser la référence de modification de la CHAÎNE, les deux chaînes, y compris l'espace.Le problème est que vous devez savoir comment de nombreux espaces sont présents dans la PREMIÈRE NOM, sinon, vous allez produire quelque chose comme "JOHNbbbbbbbbbbbbDOE", où b est un espace.
Il n'y a pas intrinsèque COBOL fonction pour déterminer le nombre d'espaces dans une chaîne de caractères, mais il y en a un pour déterminer le nombre d'espaces dans une chaîne de caractères.Par conséquent, le moyen le plus rapide, autant que je puisse en dire, est de renverser le nom de la première, de trouver le nombre d'espaces de tête, et l'utilisation de référence de modification de la chaîne du nom et du prénom.
Vous devrez ajouter ces champs de travail de stockage:
WORK-FIELD PIC X(15) VALUE SPACES.
TRAILING-SPACES PIC 9(3) VALUE ZERO.
FIELD-LENGTH PIC 9(3) VALUE ZERO.
- Inverser la de prénom
- DÉPLACER LA FONCTION INVERSE (PREMIER DU NOM) DE TRAVAIL-CHAMP.
- TRAVAIL-CHAMP contient des espaces, à la place des espaces.
- Trouver le nombre d'espaces dans la PREMIÈRE NOM
- INSPECTER LE TRAVAIL EN CHAMP DE COMPTAGE DE FUITE-DES ESPACES POUR LES ESPACES DE TÊTE.
- Tirant de l'arrière-ESPACE contient maintenant le nombre d'espaces dans la PREMIÈRE NOM.
- Trouver la longueur de la PREMIÈRE de NOM de domaine
- CALCUL DE LONGUEUR DE CHAMP = FONCTION DE LA LONGUEUR (PREMIER DU NOM).
- Concaténer deux chaînes.
- LA CHAÎNE-NOM (1:LONGUEUR DE CHAMP DE FUITE DES ESPACES DE) “ “ LAST-NAME DÉLIMITÉ PAR LA TAILLE, EN PLEIN NOM.
Vous pouvez essayer de faire une boucle pour obtenir la longueur réelle.