Comment lire des fichiers texte qui ont saut de ligne et retour chariot mélangés à l'aide de X++?
Je suis en train de lire un fichier texte à l'aide de Dynamics AX. Toutefois, le code suivant remplace les espaces dans les lignes avec des virgules:
//Open file for read access
myFile = new TextIo(fileName , 'R');
myFile.inFieldDelimiter('\n');
fileRecord = myFile.read();
while (fileRecord)
{
line = con2str(fileRecord);
info(line);
…
J'ai essayé diverses combinaisons de code ci-dessus, notamment la spécification d'un vide ''
délimiteur de champ, mais avec le même comportement.
Le code suivant fonctionne, mais semble comme il devrait y avoir une meilleure façon de le faire:
//Open file for read access
myFile = new TextIo(fileName , 'R');
myFile.inRecordDelimiter('\n');
myFile.inFieldDelimiter('_stringnotinfile_');
fileRecord = myFile.read();
while (fileRecord)
{
line = con2str(fileRecord);
info(line);
Le format du fichier est le format de champ. Par exemple:
DATAFIELD1 DATAFIELD2 DATAFIELD3
DATAFIELD1 DATAFIELD3
DATAFIELD1 DATAFIELD2 DATAFIELD3
Donc j'arrive à la fin à moins que j'ai utiliser la solution de contournement ci-dessus est quelque chose comme:
line=DATAFIELD1,DATAFIELD2,DATAFIELD3
Le problème sous-jacent est ici que j'ai mélangé les formats d'entrée. Certains des fichiers juste avoir des retours à la ligne {LF}
et d'autres ont {CR}{LF}
. À l'aide de ma solution de contournement ci-dessus semble fonctionner pour les deux. Est-il un moyen de traiter à la fois, ou à la bande \r
à partir du fichier?
Vous devez vous connecter pour publier un commentaire.
Con2Str:
Con2Str permettra de récupérer une liste de valeurs à partir d'un conteneur et, par défaut, utilise
comma (,)
pour séparer les valeurs.Si aucune valeur pour le
sep
paramètre est spécifié, le caractère virgule sera inséré entre les éléments dans la chaîne renvoyée.Options possibles:
Si vous voulez de l'espace pour être le séparateur par défaut, vous pouvez passer de l'espace en tant que second paramètre de la méthode
Con2Str
.Une autre option est que vous pouvez également faire une boucle par le conteneur
fileRecord
pour aller chercher les éléments individuels.Extrait de Code 1:
Ci-dessous extrait de code charge le contenu du fichier dans textbuffer et remplacer les retours à la ligne (
\r
) avec une nouvelle ligne (\n
) caractère. La conditionif (strlen(line) > 1)
aidera à sauter les cordes à vide en raison de la survenue possible d'consécutives caractères de saut de ligne.Extrait de Code 2:
Vous pouvez utiliser le Fichier de macro au lieu de codage en dur les valeurs
\r\n
etR
qui indique le mode de lecture.Jamais essayé d'utiliser la valeur par défaut RecordDelimiter comme FieldDelimiter et de ne pas fixer de l'autre RecordDelimiter explicitement. Normalement les lignes (Enregistrements) sont délimités par des \n et les champs sont délimités par une virgule, tabulation, point-virgule, ou de quelque autre symbole. Vous pourriez également être frapper certains comportements étranges quand TextIO est en supposant que correct UTF-format. Vous n'avez pas à fournir un exemple de quelques lignes de vous datafile, afin de deviner est dur.
Lire plus sur TextIO ici: http://msdn.microsoft.com/en-us/library/aa603840.aspx
EDIT:
Avec l'exemple de contenu de fichier, il me semble que le fichier est une largeur fixe de fichier, où chaque colonne possède sa propre largeur fixe. Je voudrais plutôt vous recommandons d'utiliser subStr si c'est le cas. Lisez à propos de substr ici: http://msdn.microsoft.com/en-us/library/aa677836.aspx
utilisation StrAlpha pour restreindre les valeurs vides après vous convertir Con2Str