Comment puis-je parcourir un enregistrement un caractère à la fois? Je souhaite interroger les enregistrements dans un fichier ASCII, un caractère à la fois, à la recherche et au remplacement des caractères non imprimables. J'ai essayé d'utiliser la condition de boucle sans succès. Merci d'avance pour votre aide.

0
tbtcust 21 févr. 2021 à 20:11

1 réponse

Meilleure réponse

Oui, cela est possible dans un DataStage Transformer.

La "Condition de boucle" crée une nouvelle ligne de sortie par itération. Il opère sur chaque ligne qu'il reçoit. Vous voudrez peut-être ajouter une contrainte à votre lien de sortie qui n'est vraie que lorsque vos itérations de boucle sont terminées (pour cette ligne).

Un petit pseudo -code pour remplacer chaque 'ä' par un '?' en parcourant char-by-char:

// Input Link "DSLink2" 
// provides a column named "text"


// Stage Variables:

NVarCHar(20) svLine := DSLink2.text
NChar(1)     svReplacementChar := "?"


// Loop Variables:

NChar(1)     lvCharToTest
Bit          lvCharOK := 0
NVarCHar(20) lvNewLine := ''
Integer      i := 0


// Loop Condition:

loop while (i < Len(svLine)) {
  i = i + 1
  lvCharToTest := svLine[i,1]

  // replace by proper test condition or function according to your needs:
  lvCharOK     := lvCharToTest = 'ä' 

  if (lvCharOK) {
    lvNewLine = lvNewLine + lvCharToTest
  }
  else {
    lvNewLine = lvNewLine + svReplacementChar
  }
}

// DSLink4_output:

If (i = Len(svLine)) {
  DSLInk4_output.text := lvNewLine
}

Capture d'écran d'une étape de transformateur montrant cet exemple

0
Justus Kenklies 11 mars 2021 à 11:55