AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Nummer der Datei um 1 erhöhen
Thema durchsuchen
Ansicht
Themen-Optionen

Nummer der Datei um 1 erhöhen

Ein Thema von AnfängerDelphi · begonnen am 2. Apr 2013 · letzter Beitrag vom 4. Jul 2013
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#11

AW: Nummer der Datei um 1 erhöhen

  Alt 3. Apr 2013, 20:17
Das local war auf die Procedure ButtonClick bezogen.
Weiss grad ned wie man das in der Delphi-Welt nennt

(bin momentan Siemens SPS-versaut und da heissen die Dinger Lokal-Variablen)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#12

AW: Nummer der Datei um 1 erhöhen

  Alt 3. Apr 2013, 20:18
Sie gehört zur Procedure ButtonClick aber privat.
Nein. Variablen innerhalb von Prozeduren und Funktionen nennt man lokale Variablen, Variablen außerhalb derselben globale. Private und Public legen lediglich fest, ob die global definierten Bezeichner nur für die jeweilige Unit oder eben auch für andere Units, welche die aktuelle Unit eingebunden haben, sichtbar sind.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: Nummer der Datei um 1 erhöhen

  Alt 3. Apr 2013, 20:21
Ok dann hab ich da wohl was verdreht.

Dann halt im privaten abschnitt der classe TForm1 deklarieren
Aber wie schon gesagt mit Aussagekräftigen Namen.

Edit:
Destotrotz vom rein logischen Denken wäre eine Private Variable eine
die nur für die einzelne procedure/Function verwendet werden kann.

Selbst wenn diese im bereich der jeweiligen Classe in dem Fall TForm1
privat deklariert wäre könnte ich auf diese zugreifen wenn ich mich in einer
Procedure/Function die von dieser Classe erbt befinde.
Dann wäre sie aber wieder für diese Classe Public da ich innerhalb der vererbten proceduren darauf zugreifen kann.


Kuddelmuddel meiner Meinung nach.
Privat ist für mich wenn ich nur in dieser einen procedure von außen(public/öffentlich) nicht zugreifen kann.

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  x : Integer;
Kann man auf diese Variable von irgendwoher zugreifen?
Abgesehen innerhalb dieser procedure.
Nein! Also nicht Public/öffentlich sondern Privat/Versteckt oder wie auch immer.
Lokal wäre dann das selbe wie Privat.

gruss

Geändert von EWeiss ( 3. Apr 2013 um 21:10 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#14

AW: Nummer der Datei um 1 erhöhen

  Alt 4. Apr 2013, 08:44
...vom rein logischen Denken wäre eine private Variable eine die nur für die einzelne procedure/Function verwendet werden kann...
Privat ist für mich wenn ich nur in dieser einen procedure von außen(public/öffentlich) nicht zugreifen kann.
'private' bezieht sich auf die Sichtbarkeit innerhalb der Klasse.
'lokal' bezieht sich auf die Sichtbarkeit innerhalb einer Methode.

Du scheinst dich an der Nomenklatur (privat vs. lokal) zu stören. Das muss man einfach so hinnehmen, wie es ist. Es ist 'per definitionem' so. Die Schlüsselwörter könnten auch 'rot' und 'gestreift' heißen.

'protected', also geschützt, sind Variablen schließlich auch nicht wirklich, selbst wenn sie so deklariert sind.

Zitat:
Selbst wenn diese ... privat deklariert wäre könnte ich auf diese zugreifen wenn ich mich in einer
Procedure/Function die von dieser Classe erbt befinde.
Aber auch nur, wenn sich der Quelltext der abgeleiteten Klasse in der gleichen Unit befindet: Ja. Ansonsten musst Du sie als 'protected' deklarieren.
  Mit Zitat antworten Zitat
AnfängerDelphi

Registriert seit: 20. Mai 2010
25 Beiträge
 
#15

AW: Nummer der Datei um 1 erhöhen

  Alt 8. Jun 2013, 22:01
Hallo an alle,

ich habe jetzt meinen Urlaub hinter mir und melde mich zurück.

Meine Zählervariable (x) habe ich global deklariert und initialisiert,und ich muß sagen,es hat funktioniert.

Warum funktioniert es nur dann,wenn die Variable global deklariert ist....???



Mfg

AnfängerDelphi
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#16

AW: Nummer der Datei um 1 erhöhen

  Alt 8. Jun 2013, 23:44
Hallo,

Zitat:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var x : Integer;
    datei : TextFile;
      pfad : String;

begin
  pfad := JvDirectoryEdit1.Directory;
  x := 1;
  AssignFile(datei, pfad +'\'+ 'datei'+ IntToStr(x) + '.txt');
    If not FileExists(pfad +'\'+ 'datei'+ IntToStr(x) + '.txt') then
      begin
       Rewrite(datei);
       CloseFile(datei);
      end
     else
      x := x+1;
      AssignFile(datei, pfad +'\'+ 'datei'+ IntToStr(x) + '.txt');
      Rewrite(datei);
      CloseFile(datei);

end;
Zitat:
Meine Zählervariable (x) habe ich global deklariert und initialisiert,und ich muß sagen,es hat funktioniert.
Nö, glaube ich nicht, dass das funktioniert
Delphi-Quellcode:
var
  x : Integer; // hier rein

procedure TForm1.Button3Click(Sender: TObject);
var // x : Integer; hier raus
    datei : TextFile;
      pfad : String;
begin
  pfad := JvDirectoryEdit1.Directory;
  x := 1;
  AssignFile(datei, pfad +'\'+ 'datei'+ IntToStr(x) + '.txt');
    If not FileExists(pfad +'\'+ 'datei'+ IntToStr(x) + '.txt') then
      begin
       Rewrite(datei);
       CloseFile(datei);
      end
     else
      x := x+1;
      AssignFile(datei, pfad +'\'+ 'datei'+ IntToStr(x) + '.txt');
      Rewrite(datei);
      CloseFile(datei);
end;
Starte Dein Programm, wähle einen Ordern, der noch vollkommen jungfräulich ist (zur Not anlegen) und klick zweimal auf den Button. Im gewählten Ordner sollten nun die Dateien:
Datei1.txt
Datei2.txt
liegen.
Öffne die "Datei2.txt" mit einem Texteditor (z. B. mit Notepad). Schreibe einen beliebigen Text (gerne: "Hallo Welt!") und schließe den Texteditor - speichern nicht vergessen. Starte Dein Programm und klick einmal auf den Button. Öffne die Datei "Datei2.txt" und wundere Dich nicht, wenn da nix mehr drin steht.

Zitat:
Warum funktioniert es nur dann,wenn die Variable global deklariert ist....???
Es funktioniert bestens, wenn die Zählvariable lokal (und bitte nur lokal) deklariert wird! Uwe Raabe und hathor habe Dir bereits alle notwendigen Hinweise und auch Code geliefert. Du kannst Deine Methode Button3Click auch so oder ähnlich ändern:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  datei : TextFile;
  pfad : string;
  s : string;
  x : Integer;
begin
  pfad := JvDirectoryEdit1.Directory;
  x := 1;
  repeat
    s := pfad + '\' + 'datei' + IntToStr (x) + '.txt';
    if not FileExists (s) then
      begin
        AssignFile (datei, s);
        Rewrite (datei);
        CloseFile (datei);
        Break
      end;

    Inc (x)
  until False
end;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat
AnfängerDelphi

Registriert seit: 20. Mai 2010
25 Beiträge
 
#17

AW: Nummer der Datei um 1 erhöhen

  Alt 26. Jun 2013, 19:28
Hallo Volker,

Deine Aussagen sind natürlich korrekt.
Fehler von mir,ich meinte damit die nachfolgende Prozedur,bei der ich eine Variable global definiert habe,Sorry.
Vorher wurde nur der Letzte Wert aus meinem ListView in die Datei geschrieben,obwohl mehrere Einträge vorhanden waren.
Jetzt werden alle ListView-Einträge in die Datei übernommen.
Ist doch eine recht einfache Lösung,oder gibt es noch einen anderen Weg???


Delphi-Quellcode:
var vListe : Smallint=1;
    

procedure TForm1.Button5Click(Sender: TObject);
var i : Smallint;
    ze,sp1,sp2,sp3 : String;

begin // dies ist nur ein Auszug von dieser Prozedur
  
  for i := 0 to ListView1.Items.Count -1 do
     begin
     ze := ListView1.Items[i].Caption;
     sp1 := ListView1.Items[i].SubItems[0]
     sp2 := ListView1.Items[i].SubItems[1]
     sp3 := ListView1.Items[i].SubItems[2]
     inc(vListe);
     end;

end;

Mfg

AnfängerDelphi
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#18

AW: Nummer der Datei um 1 erhöhen

  Alt 27. Jun 2013, 01:23
Hallo,
Zitat:
Ist doch eine recht einfache Lösung,oder gibt es noch einen anderen Weg???
Naja, eine Lösung kann ich jetzt eigentlich nicht erkennen (liegt wohl auch daran, dass ich - anhand der gegebenen Code-Fragmente - das Problem nicht wirklich sehe).
Einen anderen Weg gibt es vermutlich schon.
Und eine Lösung, die ohne globale Variable auskommt gibt es vermutlich - nö, da bin ich mir fast sicher - auch. Was spricht gegen:
Delphi-Quellcode:
//var vListe : Smallint=1; <-- da weg
procedure TForm1.Button5Click(Sender: TObject);
var
  vListe : Smallint; // <-- da hin
  i : Smallint;
  ze,sp1,sp2,sp3 : String;

begin // dies ist nur ein Auszug von dieser Prozedur
  vListe := 1;
  for i := 0 to ListView1.Items.Count -1 do
     begin
     ze := ListView1.Items[i].Caption;
     sp1 := ListView1.Items[i].SubItems[0]
     sp2 := ListView1.Items[i].SubItems[1]
     sp3 := ListView1.Items[i].SubItems[2]
     inc(vListe);
     end;
end;
Solange Du uns nur zusammenhangslose Code-Krümelchen zur Verfügung stellst, wird das nix werden mit dem Aufzeigen anderer Wege. Aber: Wenn Du bis November warten möchtest, dann ist die Wahrscheinlichkeit für noch dunklere, noch trübere und vorallem mit dickem, zähem Nebel verhangene Tage doch deutlich höher als es dies im Moment der Fall ist; dann wird es vermutlich auch ein günstiger Zeitpunkt sein, mit der langen Stange in der milchigen Brühe herumzustochern, um vielleicht das passende (Weg oder Lösung) herauszupicken.

Nix für ungut!

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
AnfängerDelphi

Registriert seit: 20. Mai 2010
25 Beiträge
 
#19

AW: Nummer der Datei um 1 erhöhen

  Alt 1. Jul 2013, 21:31
Hallo Volker,

bis November werde ich nicht warten...
Ich habe leider nicht so viel Zeit,um mich jeden Tag mit programmieren zu beschäftigen.
Bei mir läuft es wirklich nur nebenher.

Das ist die komplette Prozedur.Soweit funktioniert es auch.
Ich kann dir aber nicht sagen,wo der Fehler lag.

Delphi-Quellcode:

procedure TForm1.Button5Click(Sender: TObject);
var
  pfad, ze, sp1, sp2, sp3 : String;
  excel : OleVariant;
  vListe, i : Smallint;

begin

 pfad := Form1.JvDirectoryEdit1.Directory;

  try
    excel := CreateOleObject('Excel.Application');
   
     if FileExists(pfad + '\Datei1.xls') then
        begin
         excel.Workbooks.open(pfad + '\Datei1.xls');
         vListe := 1;

           for i := 0 to ListView1.Items.Count -1 do
              begin
               ze := ListView1.Items[i].Caption;
               sp1 := ListView1.Items[i].SubItems[0]
               sp2 := ListView1.Items[i].SubItems[1]
               sp3 := ListView1.Items[i].SubItems[2]
               inc(vListe);
               excel.Cells[vListe, 3] := sp1;
               excel.Cells[vListe, 4] := sp2;
               excel.Cells[vListe, 5] := sp3;
              end;

           excel.Visible:= true;
        end;

  finally
      excel := Unassigned;
  end;
 
end;
Aber trotzdem Danke für deine Hilfe.

Mfg

AnfängerDelphi
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

AW: Nummer der Datei um 1 erhöhen

  Alt 1. Jul 2013, 22:15
Ähm, worum ging es hier in diesem Thread nochmal?

Eine Datei mit Excel öffen und eine Variable (völlig sinnlos) inkrementieren?
(ok, evtl. eine Zeitschleife gegen Timingprobleme)
Was hat das mit "Nummer der Datei um 1 erhöhen" zu tun?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz