Autor Thema: Typ-Konflikt Variant und String  (Gelesen 2490 mal)

Offline ralph71

  • Junior Mitglied
  • **
  • Beiträge: 76
Typ-Konflikt Variant und String
« am: 16.03.20 - 10:47:02 »
Hallo,
ich möchte ein Array "Var1" (Typ Variant) mit einem Mulivalue-Feld "Liste" aus einem Dokument vergleichen.

Code (stark verkürzt):
Redim results(5)
Dim Var1 As Variant
Dim temp As Variant
temp = doc.Getitemvalue("Liste")
Var1 = FullTrim(results)


Inhaltlich sind beide Elemente im Debugger gleich, aber die Typen unterschiedlich:
Code
Var1 Typ Variant
[0] Typ Variant
[1] Typ Variant

temp Typ Variant
[0] Typ String
[1] Typ String


Dh ich kann sie jetzt nicht vergleichen. wie kann ich die Typen angleichen?

Vielen Dank!
« Letzte Änderung: 16.03.20 - 10:50:29 von ralph71 »

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Typ-Konflikt Variant und String
« Antwort #1 am: 16.03.20 - 11:52:05 »
Vor dem Vergleich der Elemente die Variants auf String convertieren ?
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline ralph71

  • Junior Mitglied
  • **
  • Beiträge: 76
Re: Typ-Konflikt Variant und String
« Antwort #2 am: 16.03.20 - 12:43:23 »
Wie denn bitte?
so nicht:
Code
Dim term1 As String
term1 = CStr(temp)

 ???

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Typ-Konflikt Variant und String
« Antwort #3 am: 16.03.20 - 12:56:22 »
Code
For i = 0 To Ubound (Var1)
   If Cstr (Var1 (i)) = temp (i) Then
      ...
   End If
Next i

oder (nicht getestet)

Code
Forall v In Var1
   v = Cstr (v)
End Forall

Offline ralph71

  • Junior Mitglied
  • **
  • Beiträge: 76
Re: Typ-Konflikt Variant und String
« Antwort #4 am: 16.03.20 - 13:09:57 »
der erste Ansatz setzt voraus, dass die Anzahl an Einträgen gleich ist.
Wäre aber möglich, wenn ich vorher die Anzahl vergleiche.


der zweite Ansatz soll das zum Ergebnis haben:

Code
Var1 Typ Variant
[0] Typ String
[1] Typ String

Richtig? Macht "er" aber nicht. "Er" macht gar nix.
« Letzte Änderung: 16.03.20 - 13:12:44 von ralph71 »

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Typ-Konflikt Variant und String
« Antwort #5 am: 16.03.20 - 13:22:34 »
der erste Ansatz setzt voraus, dass die Anzahl an Einträgen gleich ist.
Wäre aber möglich, wenn ich vorher die Anzahl vergleiche.
Natürlich, das ist ja nur ein Denkansatz und keine fertige Lösung

der zweite Ansatz soll das zum Ergebnis haben:

Code
Var1 Typ Variant
[0] Typ String
[1] Typ String

Richtig? Macht "er" aber nicht. "Er" macht gar nix.
Deshalb schrieb ich "nicht getestet", war mir nicht sicher, ob das so geht.

Gegenfrage, wie willst Du denn vergleichen? Du kannst die beiden Variablen in Script sowieso nicht direkt vergleichen

If temp = Var1 Then ...

geht nicht, Du musst eh die einzelnen Elemente ansehen. Was ist, wenn die Elemente gleich, aber in anderer Reihenfolge stehen? Ist das dann korrekt, oder nicht? Davon steht bisher nichts in der Fragestellung.

Bei zwingend gleicher Reihenfolge kannst Du auch mit Join arbeiten, oder sortierst die Arrays vorher, und dann gibt es noch die Möglichkeit, dass ein Element doppelt sein kann.

If Join (temp, Chr (9)) = Join (Var (Chr (9)) Then ...

Hängt alles von Deiner Aufgabenstellung ab ...

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Typ-Konflikt Variant und String
« Antwort #6 am: 16.03.20 - 13:27:25 »
Noch ein Ansatz, sogar getestet

Redim results (5) As String


EDIT: Falsch getestet, wenn results schon Variants enthält, geht das nicht mehr, aber am Anfang des Scriptes, das nicht bekannt ist, wäre es wohl möglich
« Letzte Änderung: 16.03.20 - 13:33:02 von Peter Klett »

Offline ralph71

  • Junior Mitglied
  • **
  • Beiträge: 76
Re: Typ-Konflikt Variant und String
« Antwort #7 am: 16.03.20 - 14:25:58 »
Redim results (5) As String --> Funktioniert korrekt.
ABER: Du hast Recht, die Variablen kann ich trotzdem nicht vergleichen.

Ich verfolge daher Ansatz 1 in Kombination mit "Redim results (5) As String"

Code
For i = 0 To Ubound (Var1)
   If Var1 (i) = temp (i) Then
      ...
   End If
Next i



Var1 und temp werden vorher sortiert, die Anzahl an Einträgen überprüft und dann einzeln verglichen.
So, funktioniert!
Danke für die Hilfe!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz