AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [TStringList] Problem mit einer Datei (bricht zu früh ab)
Thema durchsuchen
Ansicht
Themen-Optionen

[TStringList] Problem mit einer Datei (bricht zu früh ab)

Ein Thema von xZise · begonnen am 16. Sep 2006 · letzter Beitrag vom 16. Sep 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 22:08
Dein String wird aber wohl nicht richtig gesetzt. Vermutlich wird auf String[0] zugegriffen. Daher die AV beim Lesen des Strings. Das array[0..10000] besitzt ja aber den Null-Index, weshalb ein Zugriff darauf ja dann keine Probleme geben sollte.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#12

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 22:12
Also mit "0" gehts nicht...

PS: @ dein Beitrag im Forum, kommt mir sehr bekannt vor: DSDT
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#13

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 22:13
Zitat von xZise:
Also mit "0" gehts nicht...

PS: @ dein Beitrag im Forum, kommt mir sehr bekannt vor: DSDT
Schade ... ja, ist mir bekannt Ein Hinweis darauf ist auch im Forum zu finden ...
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#14

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 22:19
Ich habe das jetzt so gemacht, wie ein anderer Beitrag aus der DSDT (http://www.dsdt.info/tipps/?id=218&search=filestream) aber auch das funktioniert nicht

Gibt es eine möglichkeit deinen Code so zu verändern, dass er nach einem Wort sucht und wie oft es schon vorkommen sollte? (Also z.B. wenn du "ABCDEABCDE" hast, dass er die Position des ersten Cs und des 2. Cs angibt?)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 22:24
Du könntest die Ergebnisse alle in eine StringList schreiben, dann den entprechenden Text aus dem Buffer entfernen und weitersuchen ... wie genau das geht, weiß ich aber auch nicht.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#16

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 22:35
Okay... Ich habe es jetzt so gelöst (und meinen Bedürfnissen angepasst):
Delphi-Quellcode:
function FindInFile(const FileName : string; SearchWord : string) : TIntArray;
var
  fs : TFileStream;
  Buffer : array [1..10000] of Char;
  Size : Integer;
  idx : Integer;
  i : Integer;
begin
  SetLength(Result, 0);
  idx := 1;
  fs := TFileStream.Create(FileName, fmopenreadwrite or fmsharedenynone);
  try
    Repeat
      Application.ProcessMessages;
      Size := (Fs.Size - Fs.Position);
      if Size > 10000 then
        Size := 10000;
      Fs.ReadBuffer(Buffer, Size);
      for i := 1 to Size do
      begin
        if (Buffer[i] = SearchWord[idx]) then
          Inc(idx)
        else
          idx := 1;
        if (idx = Length(SearchWord)) then
        begin
          SetLength(Result, Length(Result) + 1);
          Result[High(Result)] := (fs.Position - Size) + i - idx + 1;
          idx := 1;
        end;
      end;
    until fs.Position >= fs.Size;
  finally
   fs.Free;
  end;
end;
TIntArray ist ein Integerarray!
Das größere Problem ist jetzt, dass ich auch noch den Wert benötige. Ich suche ja nach "<dep file="" und müsste nun an den Zwischenraum kommen (bis zum "/>)... Mal sehen, wie ich das mache!
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#17

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 22:35
Pos und Copy sollten da helfen.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#18

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 23:01
Lol?
Kann es sein, dass er ein array of Char als String behandelt, wenn er einen String erwartet?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#19

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 23:15
Jepp. Ein String ist eigentlich auch nur ein array of Char. Halt nur normalerweise nicht nullterminiert.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#20

Re: [TStringList] Problem mit einer Datei (bricht zu früh ab

  Alt 16. Sep 2006, 23:23
So... Ich habe das jetzt noch weiter umgewandelt und dabei stoße ich auf ein Problem:

Delphi-Quellcode:
function GetSigns(const FileName : string) : TStrArray;
var
  fs : TFileStream;
  Buffer : array [1..10000] of Char;
  Size : Integer;
// idx : Integer;
  i : Integer;
  BufferPos, StartPos : Integer;
  a : string;
begin
  SetLength(Result, 0);
// idx := 1;
  fs := TFileStream.Create(FileName, fmopenreadwrite or fmsharedenynone);
  try
    repeat
      Application.ProcessMessages;
      Size := (Fs.Size - Fs.Position);
      if Size > 10000 then
        Size := 10000;
      Fs.ReadBuffer(Buffer, Size);
      for i := 1 to Size do
      begin
        if Length(Result) = 0 then
          StartPos := 1;
        BufferPos := PosEx('<dep file="', Buffer, StartPos + 1);
        StartPos := BufferPos + 1;
        if (BufferPos > 0) then begin
          SetLength(Result, Length(Result) + 1);
          Result[High(Result)] := Copy(Buffer, BufferPos + 11, BufferPos + PosEx('"/>', Buffer, BufferPos));
        end;
      end;
    until fs.Position >= fs.Size;
  finally
   fs.Free;
  end;
end;
Und zwar funktioniert das Copy irgendwie net:
Code:
---------------------------
Autolocer
---------------------------
Any\Advertisement\SignRight.bik"/><dep file="Any\Advertisement\SignUp.bik"/><dep file="Any\Advertisement\SignWarning.bik"/><dep file="Any\Advertisement\SignWrongWay.bik"/><dep file="Any\Advertisement\TMSmallExit.bik"/><dep file="Any\Advertisement\Dynamic Ad1.dds"/><dep file="Any\Advertisement\Dynamic Ad2.dds"/><dep file="Any\Advertisement\Dynamic Ad3.dds"/><dep file="Any\Advertisement\pfeil_links.bik"/><dep file="Any\Advertisement\SignLeft.bik"/><dep file="Any\Advertisement\SignDown.bik"/><dep file="Any\Advertisement\PressForward.bik"/><dep file="Any\Advertisement\GamesserverAnim.bik"/><dep file="Any\Advertisement\Gamesserver.dds"/><dep file="Any\Advertisement\FullSpeed.bik"/></deps></header>
---------------------------
OK  
---------------------------
Das erhalte ich für Result[0] bei der anfangs erwähnten datei!

(PS: TStrArray = Stringarray)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 10:56 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