Autor Beitrag
norics
Hält's aus hier
Beiträge: 12

WIN XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12

WIN XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Mo 29.11.10 14:58 
user profile iconnorics hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 12

WIN XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: Mo 29.11.10 15:58 
user profile iconnorics hat folgendes geschrieben Zum zitierten Posting springen:
sollte eigentlich ergeben => meyer3.txt

Sollte es nicht meyer_3.txt ergeben?

Edit: Was passiert, wenn du den String mit concat zusammensetzt?
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 29.11.10 16:18 
Lass mich raten: GetUser gibt als letztes Zeichen ein #0 aus?

user profile iconMaxWurzel hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 29.11.10 16:36 
kleb mal das Drum
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12

WIN XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 29.11.10 17:57 
Naja, wie schon geschrieben wurde einfach deine GetUser Funktion korrigieren... die nimmt das Nullzeichen mit.
norics Threadstarter
Hält's aus hier
Beiträge: 12

WIN XP

BeitragVerfasst: Mo 29.11.10 18:11 
Hallo Sebastian,

ich habe die Funktion so verändert. Das Ergebnis bleibt aber das gleiche.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function TForm1.GetUser: String;
 var CompName : Array [1..20of 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 user profile iconMartok: Delphi-Tags gesetzt
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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:
ausblenden Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG737bab35cb28800232285f888abd5c60}</span></span>					

Wird:
ausblenden Delphi-Quelltext
1:
var Test: integer;					


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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mo 29.11.10 18:22 
user profile iconnorics hat folgendes geschrieben Zum zitierten Posting springen:
Beides zusammen geht nicht.

Probiere das einmal:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  Dateiname : string;
...
  Dateiname := GetUser;
  Dateiname := Dateiname + '_' + IntToStr(ds[listbox1.itemindex + 1].lfdnr) + '.txt');
  ShowMessage(Dateiname);

Edit 1: ShowMessage nachgetragen
norics Threadstarter
Hält's aus hier
Beiträge: 12

WIN XP

BeitragVerfasst: 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



BeitragVerfasst: Mo 29.11.10 18:40 
Lass die GetUser Funktion, wie sie ist und rufe am Ende nur Trim auf.
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var
  Dateiname : string;
  Buffer    : array [0..32of char;  // ggf. vergrößern
  Groesse   : DWord;
begin
  Groesse := SizeOf(Buffer);
  GetUserName(Buffer, Groesse);
  Dateiname := Buffer + '_' + IntToStr(ListBox1.ItemIndex + 1) + '.txt';
  ShowMessage(Dateiname);
end;
norics Threadstarter
Hält's aus hier
Beiträge: 12

WIN XP

BeitragVerfasst: 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