J’ai une application écrite en Excel / VBA qui lit les fichiers texte écrits sous UNIX. Ces fichiers consistent en des parameters de simulation de modélisation par éléments finis, où chaque ligne d’un fichier texte de 20 k + est un paramètre individuel. Mon application recherche un paramètre particulier et le renvoie à l’utilisateur en anglais. Une ligne particulière pourrait ressembler à ceci:
model.settings.excitation.modes=50
Jusqu’à présent, cette ligne de code a travaillé pour trouver le texte entre le signe ‘=’ et la fin de la ligne
InStr(1, FileContents, vbLf)
où FileContents est le fichier texte entier après le symbole ‘=’.
Quelque chose quelque part en amont de mon application a changé le caractère de retour chariot supposé ‘vbLf’ ne peut pas être trouvé, mais il est clairement là lors de sa visualisation dans Notepad ++. Mon application dépend de la recherche de ce retour chariot, et maintenant cela ne fonctionne plus.
J’ai essayé d’utiliser:
Asc(Mid(AdsFileContentsX, 3, 1))
pour isoler le caractère de retour chariot mais je me retrouve avec un caractère de la ligne suivante, donc cela ne fonctionne pas non plus.
J’ai essayé tous les dessous aussi
InStr(1, FileContents, vbLf) InStr(1, FileContents, vbCrLf) InStr(1, FileContents, vbCr) InStr(1, FileContents, vbNewLine) InStr(1, FileContents, Chr(10)) InStr(1, FileContents, Chr(13))
mais aucun d’entre eux n’a trouvé le caractère de retour chariot.
Des suggestions sur la façon d’identifier le caractère de retour chariot utilisé dans un fichier texte?
* édité pour inclure tout ce que j’ai essayé
Vous pouvez tester ASCII10 ou ASCII13 :
Sub hskdjfh() v = Range("A1").Value If InStr(1, v, Chr(10)) > 0 Or InStr(1, v, Chr(13)) > 0 Then MsgBox "got a return" Else MsgBox "no return" End If End Sub
EDIT # 1:
Voici une façon de déterminer exactement ce qu’il y a dans une cellule:
Sub WhatsInThere() Dim s As Ssortingng, L As Long Dim msg As Ssortingng, i As Long msg = "" s = Range("A1").Text L = Len(s) For i = 1 To L msg = msg & vbCrLf & i & vbTab & Mid(s, i, 1) & vbTab & AscW(Mid(s, i, 1)) Next i MsgBox msg End Sub
Dans ce cas, j’ai placé un Alt + Entrée juste après le i dans la cellule A1 :
Assez sûr il y a un bug dans VBA, j’ai 013 010 013 et vba ne peut pas le voir, il le voit seulement comme 013 010,
en supprimant 013 010 de la chaîne en utilisant replace, puis en vérifiant le résultat, il y a THRE encore 013, il faut donc 2 lignes de code pour le supprimer à cause de ce bogue