AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Prism Der Index war außerhalb des Arraybereichs
Thema durchsuchen
Ansicht
Themen-Optionen

Der Index war außerhalb des Arraybereichs

Ein Thema von Paul0703 · begonnen am 10. Mai 2009 · letzter Beitrag vom 11. Mai 2009
Antwort Antwort
Seite 1 von 3  1 23      
Paul0703

Registriert seit: 24. Sep 2008
Ort: Halle(Saale)
138 Beiträge
 
Delphi 7 Professional
 
#1

Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 17:57
Ich bin gerade dabei, ein bisschen mit ASP.NET zu programmieren und jetzt komme ich an einer Stelle nicht weiter.
Und zwar habe ich eine Funktion, die eine bestimmte Stelle in einem Quelltext auslesen kann.
Nur das funktioniert jetzt nicht so ganz, wie ich das gerne haben würde!
Wenn ich jetzt mit der Funktion FindinString einen Quelltext auslesen, kommt die meldung "Der Index war außerhalb des Arraybereichs". Habe es mal im folgenden Quelltext kommentiert.

Hoffe, jemand kann mir damit helfen!

Delphi-Quellcode:
type
TArrayofstring = array of string;

function FindInString(Text, SearchFrom, SearchTo: string; FirstOnly: Boolean; var Return: TArrayofstring): Boolean;
var
  i: Cardinal;
  FoundString: string;
begin
  Result := False;
  SetLength(Return, 0);
  i := Pos(SearchFrom, Text);
  while i > 0 do
  begin
    Result := True;
    i := i + Length(SearchFrom);
    FoundString := Copy(Text, i, PosEx(SearchTo,Text,i) - i);
    SetLength(Return, length(Return) + 1);
    Return[high(Return)] := FoundString;
    Delete(Text, 1, i);
    i := Pos(SearchFrom, Text);
    if FirstOnly then Break;
  end;
end;

procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs);
var FileStream : TFileStream;
    HTMLCode: String;
    VideoID: TArrayOfString;
    TWert: TArrayOfString;
    VideoName: TArrayOfString;
begin
  HTMLCode := TextBox1.Text;
  FindInString(HTMLCode, '<title>YouTube - ', '</title>', True, VideoName);
  FindInString(HTMLCode, '"t": "', '"', True, TWert);
  FindInString(HTMLCode, '"video_id": "', '"', True, VideoID);
  HTMLCode := 'http://youtube.com/get_video?video_id=' + VideoID[0] + '&t=' + TWert[0]; //[b]Der Index war außerhalb des Arraybereichs.[/b]
  TextBox1.Text := HTMLCode;
  end;
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 18:06
High gibt den höchsten Index -1 zurück. Im ersten Durchlauf ergibt das dann -1 und da kommt die Out of Range Exception.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Paul0703

Registriert seit: 24. Sep 2008
Ort: Halle(Saale)
138 Beiträge
 
Delphi 7 Professional
 
#3

Re: Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 18:12
Danke erstmal für deine super schnelle Antwort!
Aber könntest du das mir nochmal genauer erklären? Woher weißt du, dass high -1 zurück gibt?
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 18:14
Schau mal in der Delphihilfe unter System.Heigh.
Zitat:
In Delphi können Sie mit High die Obergrenze eines Ordinal-, Array- oder ShortString-Wertes abrufen. Der Typ des Rückgabewertes ist X oder der Indextyp von X.
X ist entweder ein Typbezeichner oder eine Variablenreferenz. X muss einer der folgenden Typen sein:
Array-Typ Der größte Wert im Bereich des Indextyps des Arrays. Bei leeren Arrays gibt High –1 zurück. <---
Offenes Array Ein Integer-Wert, der die Anzahl der Elemente im aktuellen Parameter minus 1 angibt
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

Re: Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 18:15
Es liegt vermutlich daran, dass eins der Arrays leer ist, Du musst also zunächst mit Length() prüfen, bevor Du auf Element 0 zugreifst.

[edit] @Lars: er setzt vor dem High-Aufruf die Länge hoch, daran liegt es also nicht (dann käme der Fehler auch früher und nicht in der benannten Zeile). [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Paul0703

Registriert seit: 24. Sep 2008
Ort: Halle(Saale)
138 Beiträge
 
Delphi 7 Professional
 
#6

Re: Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 18:32
Aber warum ist der Array leer? Also ich habe die Funktion auch nur aus dem Internet und kann jetzt nicht direkt jedes einzelne Wort nachvollziehen, aber es muss ja an der Funktion liegen.
Eigentlich hatte ich das selbe mal mit Win32 gemacht und da habe ich es folgendermaßen gemacht mit Indy (idHTTP).
Aber das kann ich halt in ASP.NET nicht verwenden, deshalb muss es irgendwie auch ohne indy gehen.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var FileStream : TFileStream;
    HTMLCode: String;
    VideoID: TArrayOfString;
    TWert: TArrayOfString;
    VideoName: TArrayOfString;
    Path: String;
begin
    Path := ExtractFilePath(ParamStr(0));
    IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)';
    HTMLCode := idHTTP1.Get(Edit1.Text);
    FindInString(HTMLCode, '<title>YouTube - ', '</title>', True, VideoName);
    FileStream := TFileStream.Create(GetSpecialFolder(Handle, 37) + '\' + 'MediaPlayer' + '\' + 'Temp' + '\' + VideoName[0] + '.flv', fmCreate or fmShareExclusive);
    FindInString(HTMLCode, '"t": "', '"', True, TWert);
    FindInString(HTMLCode, '"video_id": "', '"', True, VideoID);
    ProgressDownloading := True;
    idHTTP1.Get('http://youtube.com/get_video?video_id=' + VideoID[0] + '&t=' + TWert[0], FileStream);
    idHTTP1.Free;
    FileStream.Free;
    ProgressDownloading := False;
   end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

Re: Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 18:37
Schau Dir "FindInString" einmal in Ruhe an:
Zitat:
Delphi-Quellcode:
  SetLength(Return, 0);
  i := Pos(SearchFrom, Text);
  while i > 0 do
Was gibt diese Funktion denn wohl in Return zurück, wenn i 0 ergibt?

[edit] Wie ich gerade sehe, ist das ja sogar eine Boolean-Funktion, die Dir zurückgibt, ob die Länge > 0 ist. Das musst Du dann eben auch auswerten. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Paul0703

Registriert seit: 24. Sep 2008
Ort: Halle(Saale)
138 Beiträge
 
Delphi 7 Professional
 
#8

Re: Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 18:51
Zitat von DeddyH:
Schau Dir "FindInString" einmal in Ruhe an:
Zitat:
Delphi-Quellcode:
  SetLength(Return, 0);
  i := Pos(SearchFrom, Text);
  while i > 0 do
Was gibt diese Funktion denn wohl in Return zurück, wenn i 0 ergibt?

[edit] Wie ich gerade sehe, ist das ja sogar eine Boolean-Funktion, die Dir zurückgibt, ob die Länge > 0 ist. Das musst Du dann eben auch auswerten. [/edit]

Mhh. Ich blick da noch nicht so ganz durch
Also i > 0 wird nicht erfüllt, wenn i = 0 ergibt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#9

Re: Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 18:53
Richtig, wenn der String also nicht gefunden wird, ist das Array leer. Jeder Zugriff auf Element 0 muss dann also scheitern, weil es das einfach nicht gibt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Paul0703

Registriert seit: 24. Sep 2008
Ort: Halle(Saale)
138 Beiträge
 
Delphi 7 Professional
 
#10

Re: Der Index war außerhalb des Arraybereichs

  Alt 10. Mai 2009, 19:03
ok, soweit habe ich es glaube ich verstanden.
Aber warum ist i = 0 ?
Und warum war das nicht so, als ich es mit indy gemacht hatte?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 05:14 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