0
votes

Comment remplacer uniquement certains espaces dans une chaîne?

J'ai créé une fonction d'importation pour les données.

Parfois, la chaîne d'importation vient comme suit: P>

47588328 2020.06.25 11:42:13 Achetez 0,11 EURUSD 1.12240 1.11902 0.00000
2020.06.25 14:05:04 1.11902 0,00 0,00 0,00 0,00 -35,35 P> blockquote>

et parfois comme celui-ci p> xxx pré>

i divise les valeurs en une matrice. Si la chaîne est séparée par des pauses de ligne, il n'y a pas de problème. P>

Si la chaîne est séparée avec de l'espace, je ne peux pas le traiter. J'ai essayé de remplacer les espaces avec des pauses de la ligne.
Cela fonctionnerait mais il y a des pièces de date et de temps. Ils doivent rester ensemble et ne pas quand je remplace les espaces avec des pauses de ligne. P>

J'ai ceci: p>

> For Each Space in TextboxText     
>     If Not space nr = 2 or space nr = 10 Then
>         replace space
>     End if 
> Next

vba

0 commentaires

3 Réponses :


0
votes

Ce n'est pas aussi propre que je l'espérais à l'origine, je pense qu'il y a probablement une meilleure façon de le faire, mais cela fonctionne:

Sub test()
Dim s As String: s = "47588328 2020.06.25 11:42:13 buy 0.11 eurusd 1.12240 1.11902 0.00000 2020.06.25 14:05:04 1.11902 0.00 0.00 0.00 -35.35"
Dim resultArray As Variant
    resultArray = GetSplit(s)
End Sub


0 commentaires

1
votes

Je dirais que je le scinder dans un tableau comme vous l'avez fait (en utilisant probablement Split (Strtext) puis remplissez-le dans le tableau pour rejoindre la date avec l'heure. Quelque chose comme le dessous < Pré> xxx

Alors tout ce que vous effectuez par la suite avec le tableau aurait juste besoin d'inclure par exemple si myarray (x) <> "" Pour rater ces valeurs vides.


8 commentaires

Je viens d'essayer cela et il semble être de retour pour Iddate, même sur des cordes comme "0,11" - très bizarre


Bonjour Spencer Barnes J'aime vraiment ta solution! assez sexy :) Merci beaucoup d'avoir monté cela. J'aime bien parce que les dates peuvent être n'importe où dans la chaîne. Mais comme le dit Jamheadart, le seul problème est que cela revient vrai pour Isdate non seulement avec les dates. Avez-vous une idée de la façon de résoudre ce problème? Le problème sont des valeurs telles que "0,11", elles sont interprétées comme une date, pouvons-nous en quelque sorte exclure cela? Peut-être avec regex, mais je ne sais pas exactement comment travailler avec eux ...


Hmm ... dois dire que je n'ai pas vraiment testé cela de manière exhaustive, c'était la première solution que j'ai pensée. Oublié que cela interpréterait les décimales (0.11) en tant que fois (dans la présente affaire 00:11:00) Ainsi, la prochaine solution suivante; Utilisez CDate au lieu de ISDate pour vérifier que c'est une date non une heure. Il suffit de le modifier dans la réponse maintenant ...


@Lucas Si c'est un confort que je n'ai jamais entendu parler de regex. J'ai aussi simplement pensé à une méthode éventuellement plus infaillible; si ISDate (myarray (x) & "" & myarray (x + 1)) - qui pourrait être utilisé à la place, je pense. Choisissez votre favori.


Vous êtes magnifique :) J'ai également trouvé une solution, sa possible de faire une vérification additionnelle pour le "? ??" motif comme celui-ci puis testez simplement avec un test de test si TestCheck = Faux déclaration .. mais je suppose que votre solution est meilleure .. Merci beaucoup pour votre aide ... Vous pensez qu'il est possible de supprimer ces 2 valeurs vides de la matrice? Mais seules ces 2 valeurs, car il est possible qu'il existe d'autres valeurs EMTPY ... La matrice serait donc exactement la même, sinon elle sera un peu difficile avec le traitement ultérieur ..


J'ai trouvé un moyen de supprimer les valeurs EMTPY et de renvoyer un nouveau tableau. Cela fonctionne comme ceci redim Newarr (lbound (myarray) à ubound (myarray)) pour i = lbound (myarray) à ubound (myarray) si myarray (i) <> "" Alors NewRray (je ) j = j + 1 extrémité si le prochain i Redim conserve Newarr (LBound (myarray) à j)


C'est génial - content que cela fonctionne pour vous! Bonne idée sur la création d'un nouveau tableau ne contenant pas les valeurs vides.


J'ai trouvé une autre IssSue .. aussi si vous utilisez si ISDate (myarray (x) & "" & myarray (x + 1)) Certains chiffres sont interprétés comme des dates, qu'ils ne sont pas ajoutées .. J'ai ajouté Un autre vérifie comme ceci: comme1 = myarray (x) comme "#. ##" similaire2 = myarray (x + 1) comme "#. # / code > Ensuite, je teste avec une instruction IF si elles ne sont pas true si non similaire1 = true et non similaire2 = true, débogage "blabla" fin si



0
votes

Celui-ci renvoie une chaîne directement sans boucle, mais elle s'appuie également sur le principe que votre position de date ne changera jamais et une magie "

" Placeholder String! XXX

Utilisez comme ceci: xxx


0 commentaires