RegEx extraction entre simple quote
Bonjour
Je cherche à récupérer d'un fichier kml les coordonnées d'un trajet
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<Placemark>
<name>ALPHA-Cheminement</name>
<styleUrl>#msn_ylw-pushpin</styleUrl>
<LineString>
<tessellate>1</tessellate>
<coordinates>
3.78919818067865,49.23157613507813,0 3.791865127977232,49.23093688390484,0 3.794833704929468,49.22795011803071,0
</coordinates>
</LineString>
</Placemark> |
J'utilise IXMLNode
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
procedure TUnit.LoadXML(XMLNode: IXMLNode; TreeNode: TTreeNode);
var
K : integer;
LNode1 : IXMLNode;
LNode2 : IXMLNode;
SplittedPts : TStringDynArray;
NodeTree : TTreeNode;
ArrayPts : string;
begin
// Recursive call
if XmlNode.NodeName = 'Placemark' then
begin
LNode1 := XmlNode.ChildNodes.FindNode('LineString');
if (LNode1 <> Nil) then
begin
LNode2 := LNode1.ChildNodes.FindNode('coordinates');
SplittedPts := SplitString(LNode2.NodeValue,' ');
end;
end;
if XMLNode.HasChildNodes then
for I := 0 to XMLNode.ChildNodes.Count - 1 do
LoadXML(XMLNode.ChildNodes.Nodes [I], NodeTree);
end; |
Je récupère bien les coordonnées dans SplittedPts mais la chaîne comporte des caractères ACSII supplémentaires, #$A#9#9#9#9, en début et en fin de chaîne (précédé d'une virgule et d'un espace)
Citation:
(#$A#9#9#9#9'3.78919818067865,49.23157613507813,0', '3.791865127977232,49.23093688390484,0', '3.794833704929468,49.22795011803071,0', #$A#9#9#9)
Les coordonnées étant situés entre les simples quotes, j'ai essayer d'extraire ces caractères par une expression régulière avec le pattern
Citation:
const PATTERN = '\''.*\''';
Code:
1 2 3 4 5 6 7 8 9 10
|
for K := 0 to NbPts do
begin
Expr := TRegEx.Create(PATTERN);
Match := expr.Match(SplittedPts[K]);
if Match.Success then
for Group in Match.Groups do
ArrayPts := Group.value
else
ArrayPts := ''; |
Si je teste le pattern \'.*\' sur un site en ligne, j'extrais bien les coordonnées.
Le problème est que la traduction du simple quote dans Delphi n'est pas reconnu et Match.Success = false
J'ai aussi essayé d'utiliser StringReplace
Code:
ArrayPts := StringReplace(SplittedPts[K],'#$A#9#9#9#9','',[rfReplaceAll, rfIgnoreCase]);
Mais ces caractères ne sont pas supprimés
Merci de vos idées