J'essaye d'utiliser sans succès la fonction StringStripWS.
Objectif : nettoyer les blancs (espaces) et caractères de contrôle dans un texte. Voici le code utilisé:
Code : Tout sélectionner
#include <String.au3>
#include <StringConstants.au3>
Local $sText = @TAB & "This is a new story." & @CR & @LF & "Once upon a time ... "
Local $sCheck = ""
$sCheck = StringStripWS($sText, BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING, $STR_STRIPSPACES))
;$sCheck = StringStripWS($sText, $STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES)
ConsoleWrite($sCheck & @CRLF)
For $i = 1 to stringlen($sCheck)
ConsoleWrite(stringmid($sCheck,$i,1) & "-" & Asc(stringmid($sCheck,$i,1)) & @CRLF)
next
"Remarks
Whitespace includes Chr(9) thru Chr(13) which are HorizontalTab, LineFeed, VerticalTab, FormFeed, and CarriageReturn. Whitespace also includes the null string ( Chr(0) ) and the standard space ( Chr(32) )."
Lorsque l'on observe le résultat, le Carriage Return (Chr(13)) est toujours présent. Est-ce une limitation de la fonction ? Merci d'avance pour votre aide.
Solution proposée par Jchd
Code : Tout sélectionner
#include <String.au3>
#include <StringConstants.au3>
#include <Array.au3>
Local $sText = @TAB & " This is a new story." & @CR & @LF & "Once upon a time ... "
Local $sCheck = StringStripWS(StringRegExpReplace($sText, "[[:space:]]+", " "), $STR_STRIPLEADING + $STR_STRIPTRAILING + $STR_STRIPSPACES)
ConsoleWrite(">" & $sCheck & "<" & @LF)
_ArrayDisplay(StringToASCIIArray($sCheck))
La réponse détaillée de Mikell (ci-dessous) donne l'explication du problème rencontré ci-dessus. Il n'y pas de bug c'est un comportement normal et mon objectif de vouloir nettoyer les blancs multiple et les caractères de contrôle dans une chaîne de caractères pourra s'appuyer sur StringStripWS() mais pas uniquement. La solution de Jchd est une bonne base.
Mais avec le flag $STR_STRIPSPACES on fait deux fois le travaille, une fois au niveau de l'expression régulière et une fois au niveau de StringStripWS(). Je garde l'expression régulière (j'aime plus beaucoup StringStripWS()

Code : Tout sélectionner
#include <String.au3>
#include <Array.au3>
Local $sText = @TAB & " This is a new story." & @CR & @LF & "Once upon a time ... "
$sCheck = _sStrSpacesClean($sText)
ConsoleWrite(">" & $sCheck & "<" & @LF)
_ArrayDisplay(StringToASCIIArray($sCheck))
Exit
Func _sStrSpacesClean($sText)
;&========================================================================================================================
;& Description....: Remove special characters (@CR, @LF, @TAB, ...) multiples spaces, Leading and trailing
;& spaces from a text
;& Parameter(s)...:
;& $sText : Text to clean
;& Return value(s)
;& Function..: Result of the process
;& Error(s)..: -
;& -
;& Versions.......: 1.0.0
;& -
;& Author(s)......: Jean-Pol Dekimpe (Jeep) with thanks of Jchd
;& Date...........: 2019/01/28
;& Modified.......: -
;& -
;& Remark(s)......: -
;&========================================================================================================================
Return StringStripWS(StringRegExpReplace($sText, "[[:space:]]+", " "), $STR_STRIPLEADING + $STR_STRIPTRAILING)
EndFunc ;==>_sStrSpacesClean