AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

File Access: EAccessViolation

Ein Thema von Hirnsausen · begonnen am 10. Jan 2007 · letzter Beitrag vom 13. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Hirnsausen
Hirnsausen

Registriert seit: 12. Mär 2006
Ort: 18°00'33.64" N, 76°46'50.73" W, elev 344 ft
64 Beiträge
 
Delphi 7 Personal
 
#1

File Access: EAccessViolation

  Alt 10. Jan 2007, 17:39
Scheint, zu viele meiner Hirnzellen sind abgestorben...

Wo liegt der Fehler? Ich bekomme eine EAccessViolation-Fehlermeldung beim Dateilesen.

Delphi-Quellcode:
 for Runde:=0 to FileListBoxReports.Items.Count-1 do
 begin
  NameOfFile:=ReportDirectory+FileListBoxReports.Items[Runde];
  if Pos('Crystalline Carbonide',NameOfFile)>0 then AssignFile(CrystallineCarbonideFile,NameOfFile);
  if Pos('Fermionic Condensates',NameOfFile)>0 then AssignFile(FermionicCondensatesFile,NameOfFile);
  if Pos('Fernite Carbide',NameOfFile)>0 then AssignFile(FerniteCarbideFile,NameOfFile);
  if Pos('Ferrogel',NameOfFile)>0 then AssignFile(FerrogelFile,NameOfFile);
  if Pos('Fullerides',NameOfFile)>0 then AssignFile(FulleridesFile,NameOfFile);
  if Pos('Hypersynaptic Fibers',NameOfFile)>0 then AssignFile(HypersynapticFibersFile,NameOfFile);
  if Pos('Nanotransistors',NameOfFile)>0 then AssignFile(NanotransistorsFile,NameOfFile);
  if Pos('Phenolic Composites',NameOfFile)>0 then AssignFile(PhenolicCompositesFile,NameOfFile);
  if Pos('Sylramic Fibers',NameOfFile)>0 then AssignFile(SylramicFibersFile,NameOfFile);
  if Pos('Titanium Carbide',NameOfFile)>0 then AssignFile(TitaniumCarbideFile,NameOfFile);
  if Pos('Tungsten Carbide',NameOfFile)>0 then AssignFile(TungstenCarbideFile,NameOfFile);
// Reaction Basics
  if Pos('Caesarium Cadmide',NameOfFile)>0 then AssignFile(CaesariumCadmideFile,NameOfFile);
  if Pos('Carbon Polymers',NameOfFile)>0 then AssignFile(CarbonPolymersFile,NameOfFile);
  if Pos('Ceramic Powder',NameOfFile)>0 then AssignFile(CeramicPowderFile,NameOfFile);
  if Pos('Crystallite Alloy',NameOfFile)>0 then AssignFile(CrystalliteAlloyFile,NameOfFile);
  if Pos('Dysporite',NameOfFile)>0 then AssignFile(DysporiteFile,NameOfFile);
  if Pos('Fernite Alloy',NameOfFile)>0 then AssignFile(FerniteAlloyFile,NameOfFile);
  if Pos('Ferrofluid',NameOfFile)>0 then AssignFile(FerrofluidFile,NameOfFile);
  if Pos('Fluxed Condensates',NameOfFile)>0 then AssignFile(FluxedCondensatesFile,NameOfFile);
  if Pos('Hexite',NameOfFile)>0 then AssignFile(HexiteFile,NameOfFile);
  if Pos('Hyperflurite',NameOfFile)>0 then AssignFile(HyperfluriteFile,NameOfFile);
  if Pos('Neo Mercurite',NameOfFile)>0 then AssignFile(NeoMercuriteFile,NameOfFile);
  if Pos('Platinum Technite',NameOfFile)>0 then AssignFile(PlatinumTechniteFile,NameOfFile);
  if Pos('Prometium',NameOfFile)>0 then AssignFile(PrometiumFile,NameOfFile);
  if Pos('Rolled Tungsten Alloy',NameOfFile)>0 then AssignFile(RolledTungstenAlloyFile,NameOfFile);
  if Pos('Silicon Diborite',NameOfFile)>0 then AssignFile(SiliconDiboriteFile,NameOfFile);
  if Pos('Solerium',NameOfFile)>0 then AssignFile(SoleriumFile,NameOfFile);
  if Pos('Sulfuric Acid',NameOfFile)>0 then AssignFile(SulfuricAcidFile,NameOfFile);
  if Pos('Titanium Chromide',NameOfFile)>0 then AssignFile(TitaniumChromideFile,NameOfFile);
  if Pos('Vanadium Hafnite',NameOfFile)>0 then AssignFile(VanadiumHafniteFile,NameOfFile);
 end;

 WerteAlt[0]:='0';
 if (CheckBoxCrCaR.Checked=True and CheckBoxCrCaR.Enabled) then
 begin
  Reset(CrystallineCarbonideFile);
  Readln(CrystallineCarbonideFile,Zeile);
  repeat
   Readln(CrystallineCarbonideFile,Zeile);
   if Pos('True',Zeile)>0 then
   begin
    WerteNeu:=Explode(',',Zeile,0);
    if StrToFloat(WerteNeu[0])>StrToFloat(WerteAlt[0]) then
    begin
     if WerteNeu[11]='30000142then WerteAlt:=WerteNeu;
    end;
   end;
  until EOF(CrystallineCarbonideFile);
  CloseFile(CrystallineCarbonideFile);
  VerkaufsPreis01:=StrToFloat(WerteAlt[0]);
       label1.Caption:=floattostr(VerkaufsPreis01);
 end;
Vielen Dank für Eure Zeit, Absicht, Mühe und Ideen.

Sven
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: File Access: EAccessViolation

  Alt 10. Jan 2007, 18:14
In welcher Zeile? Laß das Programm mal durch den Debugger laufen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: File Access: EAccessViolation

  Alt 10. Jan 2007, 18:31
Ein Debugger sagt mehr als tausend Worte

Neben folgenden Problemen, wie
-Dateien haben weniger als 2 Zeilen
-NameOfFile falsch zusammengesetzt (da kann u.U ein "\" fehlen)
-die Datei existiert nicht einmal

geht auch noch:
- Pos('Crystalline Carbonide',NameOfFile)=0
und (CheckBoxCrCaR.Checked=True and CheckBoxCrCaR.Enabled)=TRUE

Der Fehler kann auch hier sein:
WerteNeu[11]='30000142'
oder hier:
WerteNeu[0]

Da wissen wir wohl zu wenig.


Anmerkung: Reciht es nicht, wenn du nur eine Variable für textfile hast und nur den Namen unterschiedlich zuweist?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Hirnsausen
Hirnsausen

Registriert seit: 12. Mär 2006
Ort: 18°00'33.64" N, 76°46'50.73" W, elev 344 ft
64 Beiträge
 
Delphi 7 Personal
 
#4

Re: File Access: EAccessViolation

  Alt 10. Jan 2007, 20:31
Erstmal das: At address 004044DC...
Aber ich will Euch die gewünschten Debugger-Informationen geben. Wie benutze ich den Debugger?

Oder ich biete an, alle Dateien in einem ZIP-Archiv bereitzustellen. Wäre das okay?
Vielen Dank für Eure Zeit, Absicht, Mühe und Ideen.

Sven
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: File Access: EAccessViolation

  Alt 10. Jan 2007, 20:35
Zitat:
Aber ich will Euch die gewünschten Debugger-Informationen geben. Wie benutze ich den Debugger?
Starte die Anwendung in der IDE
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: File Access: EAccessViolation

  Alt 11. Jan 2007, 07:08
Zitat von Hirnsausen:
Erstmal das: At address 004044DC...
Aber ich will Euch die gewünschten Debugger-Informationen geben. Wie benutze ich den Debugger?

Oder ich biete an, alle Dateien in einem ZIP-Archiv bereitzustellen. Wäre das okay?
Du gehst auf die erste Zeile (oder noch vorher), ab der du einen Fehler vermutest (der zum Abbruch des Programms führt). Am besten halt auf die erste Zeile des geposteten Codes.
Und dann drückst du [F5] --> es erscheint ein roter Streifen (Breakpoint genannt). Den kannst du später mit [F5] genauso wieder ausschalten (Für Breakpoints setzen und löschen gibts noch mehr Möglichkeiten, u.a. bedingte Breakpoints)
Du machst den einfachen Breakpoint, damit hält dein Programm automatisch an der Stelle an. Dann gibts folgende Tasten:

[F9] Programm normal weiter ausführen (bzw. bis zum nächsten Breakpoint)
[F8] eine Zeile ausführen und wieder anhalten
[F7] eine Zeile und evtl. in UnterProgramm/Prozedur/Funktion springen
[F4] Bis zum Cursor den Code ausführen
[F5] weitere Breakpints setzen, löschen
und ganz wichtig [Strg]+[F5]: Da kannst du den Inhalt von Variablen dir ansehen (und mit [strg]+[F7] auch ändern)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Hirnsausen
Hirnsausen

Registriert seit: 12. Mär 2006
Ort: 18°00'33.64" N, 76°46'50.73" W, elev 344 ft
64 Beiträge
 
Delphi 7 Personal
 
#7

Re: File Access: EAccessViolation

  Alt 11. Jan 2007, 09:45
MKinzler und vor allem Sirius:

Danke für Eure Antworten!

Breakpoints: getan, aber das Program endet noch immer an der letzten Zeile des Progreammes (die nun blau hinterlegt ist), und gibt mir dort den Fehler aus...

Ich werde mal alles packen, und Euch als ZIP geben.

Die eine ZIP-Datei beinhaltet das Programm, die andere auszuwertende Logs. Das Programm updatet sich mittels TTimer jede Sekunde einmal und prüft, ob relevante Logs (Marktdaten) vorhanden sind. Dann soll es die Dateien auslesen und (irgendwann) die Kosten für die Reaktionsprodukte errechnen.

Gelöste Probleme:
- Mehrere Dateiversionen eines Produktes existieren
- Dateinamen variable (durch integriertes Datum)


Zu tun:
- Absturz des Programmes verhindern
- Sortieren der Werte in den Marktdateien
- Werte errechnen
Angehängte Dateien
Dateityp: zip marketlogs_403.zip (31,1 KB, 2x aufgerufen)
Dateityp: zip complex_reactions_manager_142.zip (1,76 MB, 1x aufgerufen)
Vielen Dank für Eure Zeit, Absicht, Mühe und Ideen.

Sven
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: File Access: EAccessViolation

  Alt 11. Jan 2007, 10:44
So, ich hab mal kurz drübergeschaut. Aber aufgrund fehlender Zeit konnte ich nicht viel machen.

1. "Application.Terminate": das ist wie aus dem fahrenden Auto springen. Einfach das Hautpformular schließen ist schöner (so mit anhalten, Motor aus, aussteigen und abschließen) --> Application.terminate durch einfaches "close" ersetzen.

so und jetzt zu deiner Funktion
2.1. Der Fehler tritt bei WerteAlt[0]='0' auf. WerteAlt ist ein TStringDynArray (also array of string), also ein dynamisches Array. Schau dir an, wie dynamische arrays funktionieren (mit: setlength, finalize, copy). Fürs erste reicht es davor ein "setlength(WerteAlt,1);" zu setzen.
2.2. Dann ist er bei mir rausgeflogen bei "strtofloat(Werteneu[0])". Das lag daran, dass er bei mir als Dezimaltrennzeichen ein "," erwartet hat und nur einen "." finden konnte (also mit dem Punkt nix anzufangen wusste). Hier kann man mit TFormatsettings was machen.
2.3. Das nächste Problem liegt hier WerteAlt:=WerteNeu funktioniert nicht so, wie du es willst. Das sind beides dynamische arrays, also in erster Instanz nur Zeiger. Du kopierst also nur die Adresse aber nicht den Inhalt (ist wie, als würdest du deinem Kunpel alle deine Möbel schenken wollen, stattdessen ziehst du bei ihm ein). Mach mal so: "WerteAlt:=copy(WerteNeu)"

Soviel zu den offensichtlichen Dingen

Jetzt willst du noch Werte sortieren. Dann mach die mal mit TStringList vertraut (inkl Loadfromfile).

Was du mit Werte errechnen meinst, weis ich nicht.

Noch etwas: Es wäre nicht schlecht wenn du die Funktion aus dem Timer in einen eigenen Thread legen könntest (such mal nach TThread).

Mehr will ich nicht meckern
Nur bei manchen Sachen hab ich mir gedacht, dass man die PRogrammierweise nochmal näher durchleuchten sollte. Mir fehlt aber die Zeit.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Hirnsausen
Hirnsausen

Registriert seit: 12. Mär 2006
Ort: 18°00'33.64" N, 76°46'50.73" W, elev 344 ft
64 Beiträge
 
Delphi 7 Personal
 
#9

Re: File Access: EAccessViolation

  Alt 11. Jan 2007, 10:57
Nein, das ist kein Meckern, sondern Hilfe der besten Art! Ich danke Dir dafür ungemein! Ich werde jetzt erstmal Deine Hinweise auswerten und anwenden...
Vielen Dank für Eure Zeit, Absicht, Mühe und Ideen.

Sven
  Mit Zitat antworten Zitat
Benutzerbild von Hirnsausen
Hirnsausen

Registriert seit: 12. Mär 2006
Ort: 18°00'33.64" N, 76°46'50.73" W, elev 344 ft
64 Beiträge
 
Delphi 7 Personal
 
#10

Re: File Access: EAccessViolation

  Alt 11. Jan 2007, 19:49
deleted - wie kann ich diesen Posting löschen (nur diesen, nicht die vorherigen)?
Vielen Dank für Eure Zeit, Absicht, Mühe und Ideen.

Sven
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:28 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