Autor |
Beitrag |
norics
Hält's aus hier
Beiträge: 12
WIN XP
|
Verfasst: Mo 29.11.10 14:18
Hallo Zusammen,
ich möchte mir gerne meinen Dateinamen aus verschiedenen Kriterien zusammen bauen. In meinem Fall ist es der UserName und eine Auswahl aus der Listbox. Es wird nur der GetUser angezeigt. Wenn ich den GetUser weglasse, wird der Rest korrekt übernommen. Beides zusammen geht nicht.
(GetUser+'_'+IntToStr(ds[listbox1.itemindex+1].lfdnr)+'.txt');
Hat jemand eine Idee?
Viele Grüsse
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 29.11.10 14:31
was ist ds[ ??
setz mal einen Brechpunkt hier und steppe mit F7 rein...
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
norics 
Hält's aus hier
Beiträge: 12
WIN XP
|
Verfasst: Mo 29.11.10 14:52
Hallo,
das ist ein Datensatz Array mit der lfdnr des ausgewählten Satzes.
Den kann ich auch weglassen und direkt die Auswahlnummer übernehmen.
Showmessage(GetUser+'_'+IntToStr(listbox1.itemindex+1)+'.txt');
Das geht aber auch nicht.
Gruss
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 29.11.10 14:58
norics hat folgendes geschrieben : | Das geht aber auch nicht. |
Kannst du das präzisieren? WANN geht WAS nicht.
Die Zeile Code ist syntaktisch richtig würd ich sagen, der Compiler dürfte sich wohl nicht beschweren.
Gebe mal beides einzeln aus. Was zeigt er dann an? Was zeigt er jetzt an? Gib mal den genauen String hier an.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
norics 
Hält's aus hier
Beiträge: 12
WIN XP
|
Verfasst: Mo 29.11.10 15:48
Hallo,
hilfsweise lass ich mir das in der Messagebox anzeigen.
showmessage(IntToStr(ds[listbox1.itemindex+1].lfdnr)+'.txt'); Ergebnis => 3.txt
showmessage(GetUser); Ergebnis => meyer
showmessage(GetUser+'_'+IntToStr(listbox1.itemindex+1)+'.txt'); sollte eigentlich ergeben => meyer3.txt ; Ergebnis ist aber => meyer
Gruss
|
|
MaxWurzel
      
Beiträge: 77
Erhaltene Danke: 10
|
Verfasst: Mo 29.11.10 15:58
norics hat folgendes geschrieben : | sollte eigentlich ergeben => meyer3.txt
|
Sollte es nicht meyer_3.txt ergeben?
Edit: Was passiert, wenn du den String mit concat zusammensetzt?
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 29.11.10 16:18
Lass mich raten: GetUser gibt als letztes Zeichen ein #0 aus?
MaxWurzel hat folgendes geschrieben : | Edit: Was passiert, wenn du den String mit concat zusammensetzt? |
Das Gleiche, AFAIR wird exakt der gleiche Code generiert.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 29.11.10 16:24
MSDN - GetUserName hat folgendes geschrieben: | If the function succeeds, the return value is a nonzero value, and the variable pointed to by lpnSize contains the number of TCHARs copied to the buffer specified by lpBuffer, including the terminating null character. |
Ok, die Frage ist ob GetUser diese Funktion verwendet...sehr wahrscheinlich 
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 29.11.10 16:36
kleb mal das Drum
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Function RemoveZeros(s:AnsiString):AnsiString; var i:Integer; begin Result := ''; for I := 1 to Length(s) do if s[i] <> #0 then Result := Result + s[i] ; end; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.11.10 16:46
Besser wäre es aber den Fehler (Nullzeichen ist zu viel in GetUser) zu beheben statt des Symptoms...
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 29.11.10 16:52
@jaenicke
stimmt, war auch nur zum testen gedacht....
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
norics 
Hält's aus hier
Beiträge: 12
WIN XP
|
Verfasst: Mo 29.11.10 17:43
Moin Moin,
Tschuldigung . Klar sollte das "meyer_2.txt" dann sein.
Ich habe mir jetzt ganz unelegant mit einem edit Feld geholfen. Wenn ich das nacheinander einstelle (erst LoginUser dann den rest)kann ich das weiterverwenden.
Wenn jemand noch eine "schönere" Lösung anbieten kann, bitte gerne mitteilen.
Vielen Dank
Gruss
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.11.10 17:57
Naja, wie schon geschrieben wurde einfach deine GetUser Funktion korrigieren... die nimmt das Nullzeichen mit.
|
|
norics 
Hält's aus hier
Beiträge: 12
WIN XP
|
Verfasst: Mo 29.11.10 18:11
Hallo Sebastian,
ich habe die Funktion so verändert. Das Ergebnis bleibt aber das gleiche.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function TForm1.GetUser: String; var CompName : Array [1..20] of Char; SizeD : DWord; i:Integer; begin SizeD := 15; GetUserName( @CompName, SizeD ); begin Result := ''; for I := 1 to Length(CompName) do if CompName[i] <> #0 then Result := Result + CompName[i] ; end; result:=CompName; end; |
Gruss
Volker
Moderiert von Martok: Delphi-Tags gesetzt
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 29.11.10 18:13
Hallo!
Bitte verwende für Quellcode die entsprechenden [delphi ]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:
Quelltext 1:
| <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG737bab35cb28800232285f888abd5c60}</span></span> |
Wird:
Delphi-Quelltext
Ich hab das gleich mal für dich erledigt, für die Zukunft dann.
Viele Grüße,
Martok
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mo 29.11.10 18:22
|
|
norics 
Hält's aus hier
Beiträge: 12
WIN XP
|
Verfasst: Mo 29.11.10 18:34
Hallo Gerd,
Danke für den Vorschlag, das ist aber das gleiche Ergebnis wie vorher. Da ändert sich nichts.
Gruss
Volker
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 29.11.10 18:40
Lass die GetUser Funktion, wie sie ist und rufe am Ende nur Trim auf.
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mo 29.11.10 18:56
Hier eine gerade getestete Version. Allerdings weiß ich nicht, was GetUser für eine Funktion ist. Im Beispiel habe ich es durch GetUserName ersetzt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button1Click(Sender: TObject); var Dateiname : string; Buffer : array [0..32] of char; Groesse : DWord; begin Groesse := SizeOf(Buffer); GetUserName(Buffer, Groesse); Dateiname := Buffer + '_' + IntToStr(ListBox1.ItemIndex + 1) + '.txt'; ShowMessage(Dateiname); end; |
|
|
norics 
Hält's aus hier
Beiträge: 12
WIN XP
|
Verfasst: Mo 29.11.10 19:07
Hallo Gerd,
Vielen Dank. Komisch, das funktioniert. Ich sehe noch nicht wo der Unterschied liegt, aber ich werde den Sourcecode morgen mal aufräumen und das dann mal nachvollziehen.
Danke auch an die anderen.
Gruss
Volker
|
|