2 Identische Strings NICHT gleich?!?!?!

Schönen guten Tag…

Ich mal wieder ^^ …

Also folgendes Problem …
Ich habe ne INI file wo diverse sachen drin gespeichert sind. Wie zb Server namen passwörter pfade.

Das Problem welches ich nun habe liegt in den Pfaden.
Ich habe das mit der ini so gelöst. (alles andere funktioniert. Nur die pfade nicht.)

Die Prublic Declare funktionen mal aussen vorgelassen rufe ich den Pfad so auf:

Dim bPfad As String

Funktionsname bla bla ()
Dim Buffer6 As String \* 1000

Call GetPrivateProfileString("BILDERPATH", "PATH", "", Buffer6, 1000, App.Path & cPath)


bPfad = Trim(Buffer6)
End Funktion bla bla

Der Aufruf des Modules in dem das drinne steht bringt mir auch den Pfad. Nur es Klappt nicht.

Wenn ich die beiden Pfade ausgeben lasse sehen sie identisch aus aber er bringt mir mit String vergleich einen fehler als wenn ich es so eingebe:

bPfad = „\Base01\Userfiles\BASE\01 Organisation\05 Konstruktion\02 elektr. Konstruktion\Datenblaetter“

Wenn ich dann auf diesen Pfad zugreifen will bzw den hier auskommentiere und den aus der ini benutze, dann bringt er gar nix. Erst wenn ich den wieder nehme Funktioniert alles wie es soll.

Hat wer ne ahnung warum??

Grüße vom digi.

Hi digi,

Call GetPrivateProfileString(„BILDERPATH“, „PATH“, „“,
Buffer6, 1000, App.Path & cPath)

Hat wer ne ahnung warum??

Ahnung wäre zu viel gesagt. Mir fällt nur etwas auf, wo oft eine Falle lauert. App.Path endet nicht immer mit einem „“! Wenn cPath dann nicht mit einem „“ beginnt bekommst Du einen ungültigen Pfad. Ich würde mal …

Call GetPrivateProfileString("BILDERPATH", "PATH", "", Buffer6, 1000, App.Path & "\" & cPath)

… probieren. Wenn App.Path dann allerdings ein Laufwerk ist, hast Du zwei hintereinander, App.Path schreibe ich nie so in einen Code.

Bei mir würde da stehen:

Pfad = App.Path
If Right(Pfad,1) "\" Then
 Pfad = Pfad & "\"
End If
Call GetPrivateProfileString("BILDERPATH", "PATH", "", Buffer6, 1000, Pfad & cPath)

(Obwohl ich ‚GetPrivateProfileString‘ nicht kenne und über die Richtigkeit des Codes nichts weiß. :smile: Mein Kommentar beschränkt sich auf die Falle, die App.Path stellt.)

Gruß, Rainer

Gute idee aber leider nich das was das prob is :frowning:

Er findet die Ini. Er nimmt sie perfekt so wies sein muss läd die Strings bzw infos in die variablen und sie stehen drinne.

Hab sie mir mit Debug.Print ausgeben lassen.

Also die Variable aus der ini den
bPath und den bFolder den ich expliziz im programm zugewiesen habe.

Diese „sehen“ beide absolut bis aufs letzte zeichen identisch aus

[BILDERPATH]
PATH=\Base01\Userfiles\BASE\01 Organisation\05 Konstruktion\02 elektr. Konstruktion\Datenblaetter\

Gibt im programm in der variable
bPath = \Base01\Userfiles\BASE\01 Organisation\05 Konstruktion\02 elektr. Konstruktion\Datenblaetter\

und
bFolder = \Base01\Userfiles\BASE\01 Organisation\05 Konstruktion\02 elektr. Konstruktion\Datenblaetter\

Aber er nimmt sie nicht als Gleich er meint sie währen ungleich.
Ich habe den dann einfach mal so übergeben an die GDI die mit thumbnails erstellt und es geht wirklich nicht.

Als welcher Code stehen die zeichen in ner inifile?
Unicode ASCII oder was? Und als was werden sie, wenn ich sie im programm mit As String und Variable = „Name“ deklariere gespeichert?! Eigentlich doch genau das selbe oder?

grüße vom digi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi digi,

Gute idee aber leider nich das was das prob is :frowning:

schade. :frowning: Na ja, es kann ja nicht immer so leicht sein.

Er findet die Ini. Er nimmt sie perfekt so wies sein muss läd
die Strings bzw infos in die variablen und sie stehen drinne.

Hab sie mir mit Debug.Print ausgeben lassen.

Also die Variable aus der ini den
bPath und den bFolder den ich expliziz im programm zugewiesen
habe.

Diese „sehen“ beide absolut bis aufs letzte zeichen identisch
aus

[BILDERPATH]
PATH=\Base01\Userfiles\BASE\01 Organisation\05
Konstruktion\02 elektr. Konstruktion\Datenblaetter\

Gibt im programm in der variable
bPath = \Base01\Userfiles\BASE\01 Organisation\05
Konstruktion\02 elektr. Konstruktion\Datenblaetter\

und
bFolder = \Base01\Userfiles\BASE\01 Organisation\05
Konstruktion\02 elektr. Konstruktion\Datenblaetter\

Aber er nimmt sie nicht als Gleich er meint sie währen
ungleich.

Leerzeichen? Lass Dir vor und hinter dem String mal ein ‚#‘ ausgeben. Notfalls dann Leerzeichen mit 'Trim() entfernen.

Ich habe den dann einfach mal so übergeben an die GDI die mit
thumbnails erstellt und es geht wirklich nicht.

Als welcher Code stehen die zeichen in ner inifile?
Unicode ASCII oder was? Und als was werden sie, wenn ich sie
im programm mit As String und Variable = „Name“ deklariere
gespeichert?! Eigentlich doch genau das selbe oder?

Ich habe noch nie ein Ini-File verwendet, darüber weiß ich nichts.

Gruß, Rainer

Jetz wirds noch kurrioser…

Ich habe diese beiden strings mir mal Binär ausgegeben … Die sind absolut bis aufs letzte bit identisch!
Ich raffe es echt nicht. Warum sind die dann unterschiedlich?!

Kann es was mit dem As String * 1000 zu tun haben?

Aber wiederrum. Ich habe gerade ne Var als String * 1000 deklariert und mal bFolder mit Trim bearbeitet und dann die bearbeitete so mit der aus der ini verglichen … das selbe ergebnis … != … so n mist!

Ich kriegs nich hin … verdammt!

Grüße vom digi …

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Digi,

Jetz wirds noch kurrioser…

Ich habe diese beiden strings mir mal Binär ausgegeben … Die
sind absolut bis aufs letzte bit identisch!
Ich raffe es echt nicht. Warum sind die dann unterschiedlich?!

Kann es was mit dem As String * 1000 zu tun haben?

Ja. Ich habe mal etwas gebastelt. :smile:

Bei dem Code …

Option Explicit

Private Sub Command1\_Click()
 Dim txt As String \* 10
 Text1.Text = "#" & txt & "#"
End Sub

… wird nur ein ‚#‘ in der Textbox angezeigt! txt besteht aus 10 mal Chr(0) und das kann die Textbox nicht ausgeben.

Mit

Option Explicit

Private Sub Command1\_Click()
 Dim txt As String \* 10
 txt = Replace(txt, Chr(0), " ")
 Text1.Text = "#" & txt & "#"
End Sub

… erscheint dann

'# #'

und mit Trim()

Option Explicit

Private Sub Command1\_Click()
 Dim txt As String \* 10
 txt = Replace(txt, Chr(0), " ")
 Text1.Text = "#" & Trim(txt) & "#"
End Sub

… gibt’s dann das gewünschte ‚##‘.

Du hast wirklich nicht einen 1000 Zeichen langen String? Ab dem ersten chr(0) siehst Du das dann nicht mehr.

Gruß, Rainer

*g* Gleiche idee ^^ ich hab das gerade auch mal spassenshalber in ne textbox ausgeben lassen und wieder auf die variable verwiesen. Und es ging ^^ … Aber danke trotzdem was auch immer chr(0) ist ich werd 2 suchen und gegen eins ersetzen und zum schluss noch mal \Chr(0) gegen \ ersetzen.

Oder gibts da ne möglichkeit?!

Der pfad ist freilich nicht 1000 zeichen lang. Aber ich will ihn jetz nich auf 60 oder 100 zeichen beschränken. Wenn sich mal was an der ordner strucktur ändert funktioniert gar nix mehr. Und das wollt ich ja mit dem benutzen der inifile umgehen.

Grüße vom digi :smile: danke :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nachtrag
Hi digi,

schon wieder eine Ergänzung.

Das hier …

Option Explicit

Private Sub Command1\_Click()
 Dim txt As String \* 10
 txt = "a"
 txt = Trim(txt)
 Text1.Text = "#" & txt & "#"
End Sub

… bringt nichts, txt ist auf die Länge 10 festgelegt. Um da die Leerzeichen entfernen zu können muß ich das schon in eine andere Variable ‚umschaufeln‘!

Gruß, Rainer

Hi Digi,

*g* Gleiche idee ^^ ich hab das gerade auch mal spassenshalber
in ne textbox ausgeben lassen und wieder auf die variable
verwiesen. Und es ging ^^ …

gut. Pass aber auf, Du mußt dann eine andere Variable verwenden. Die Variable, die Du auf 1000 festgelegt hast, kannst Du nicht verkürzen. Sonst wunderst Du Dich dann, hier geht’s und da nicht. :smile:

Aber danke trotzdem was auch immer chr(0) ist

*gg* Chr(0) ist einfach „&h0“. Ein Leerzeichen ist ja Chr(32) oder eben „&h20“. Chr(0) kann man nicht als Text ausgeben, alles was danach kommt wird ‚verschluckt‘. :smile:

ich werd 2 suchen und gegen eins ersetzen und
zum schluss noch mal \Chr(0) gegen \ ersetzen.

Oder gibts da ne möglichkeit?!

TxtNeu = Left(txt,Instr(txt, Chr(0))-1) sollte gehen,
txt = Left(txt,Instr(txt, Chr(0))-1) geht aber nicht. :smile:

Gruß, Rainer

Hi Digi,

*g* Gleiche idee ^^ ich hab das gerade auch mal spassenshalber
in ne textbox ausgeben lassen und wieder auf die variable
verwiesen. Und es ging ^^ …

gut. Pass aber auf, Du mußt dann eine andere Variable
verwenden. Die Variable, die Du auf 1000 festgelegt hast,
kannst Du nicht verkürzen. Sonst wunderst Du Dich dann, hier
geht’s und da nicht. :smile:

Aber danke trotzdem was auch immer chr(0) ist

*gg* Chr(0) ist einfach „&h0“. Ein Leerzeichen ist ja Chr(32)
oder eben „&h20“. Chr(0) kann man nicht als Text ausgeben,
alles was danach kommt wird ‚verschluckt‘. :smile:

ich werd 2 suchen und gegen eins ersetzen und
zum schluss noch mal \Chr(0) gegen \ ersetzen.

Oder gibts da ne möglichkeit?!

TxtNeu = Left(txt,Instr(txt, Chr(0)-1) sollte gehen,
txt = Left(txt,Instr(txt, Chr(0)-1) geht aber nicht. :smile:

Gruß, Rainer

Ich habs so gemacht ^^

Public Sub Lade\_Inidatei()
 Dim Buffer1 As String \* 100
 Dim Buffer2 As String \* 100
 Dim Buffer3 As String \* 100
 Dim Buffer4 As String \* 100
 Dim Buffer5 As String \* 100
 Dim Buffer6 As String \* 1000
 Dim Rep As String


 Check1 = GetPrivateProfileInt("IntegratedSecurity", "Chk1", 1, App.Path & cPath)
 Call GetPrivateProfileString("ConnInfos", "ServerInfo", "", Buffer1, 100, App.Path & cPath)
 Call GetPrivateProfileString("ConnInfos", "Benutzer", "", Buffer2, 100, App.Path & cPath)
 Call GetPrivateProfileString("ConnInfos", "Pass", "", Buffer3, 100, App.Path & cPath)
 Call GetPrivateProfileString("ConnInfos", "Datenbank", "", Buffer4, 100, App.Path & cPath)
 Call GetPrivateProfileString("DBLIST", "ListeID", "", Buffer5, 100, App.Path & cPath)
 Call GetPrivateProfileString("BILDERPATH", "PATH", "", Buffer6, 1000, App.Path & cPath)

 Rep = Trim(Buffer1)
 ServerInf = nullzeichen(Rep)
 Rep = Trim(Buffer2)
 UserInf = nullzeichen(Rep)
 Rep = Trim(Buffer3)
 PassInf = nullzeichen(Rep)
 Rep = Trim(Buffer4)
 DBInf = nullzeichen(Rep)
 Rep = Trim(Buffer5)
 LISTEID = nullzeichen(Rep)
 Rep = Trim(Buffer6)
 bFolder = nullzeichen(Rep)
 checked = Check1
End Sub

Public Function nullzeichen(ByRef Information As String)
 Dim ReplacedString As String
 ReplacedString = Replace(Information, Chr(0), "")

 nullzeichen = ReplacedString
End Function

)

Hallo Rainer,

Ahnung wäre zu viel gesagt. Mir fällt nur etwas auf, wo oft
eine Falle lauert. App.Path endet nicht immer mit einem „“!
Wenn cPath dann nicht mit einem „“ beginnt bekommst Du einen
ungültigen Pfad. Ich würde mal …

Call GetPrivateProfileString(„BILDERPATH“, „PATH“, „“,
Buffer6, 1000, App.Path & „“ & cPath)

… probieren. Wenn App.Path dann allerdings ein Laufwerk ist,
hast Du zwei hintereinander, App.Path schreibe ich nie so in
einen Code.

Bei mir würde da stehen:

Pfad = App.Path
If Right(Pfad,1) „“ Then
Pfad = Pfad & „“
End If
Call GetPrivateProfileString(„BILDERPATH“, „PATH“, „“,
Buffer6, 1000, Pfad & cPath)

Warum so kompliziert Rainer ?

 Call GetPrivateprofileString("BILDERPATH, "PATH", "",Buffer6, 1000, iif(right(app.path,1)="\",app.path & cPath,app.path & "\" & cPath))

(Obwohl ich ‚GetPrivateProfileString‘ nicht kenne und über die
Richtigkeit des Codes nichts weiß. :smile: Mein Kommentar
beschränkt sich auf die Falle, die App.Path stellt.)

Gruß, Rainer

Gruß Alex

Hi Alex,

Warum so kompliziert Rainer ?

weil ich dämlich bin. :smile:

 Call GetPrivateprofileString("BILDERPATH, "PATH", "",Buffer6,
1000, iif(right(app.path,1)="\",app.path & cPath,app.path &
"\" & cPath))

Das vergesse ich immer wieder, daß es so auch geht. :frowning:

Gruß, Rainer