Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeilen mit Stringliste bis zu bestimmten Zeichen auslesen (https://www.delphipraxis.net/74196-zeilen-mit-stringliste-bis-zu-bestimmten-zeichen-auslesen.html)

DragonsTear 30. Jul 2006 14:27

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Ich glaube der Fehler liegt woanders, da ich auch kein Delphi 5 verwende.

Es kommt immer noch zu einem Exception Fehler, wenn ich auf Datei öffnen klicke. Anschliessend klicke ich die Datei an, es ist eine Textdatei in C:\ mit den 3 Beispielzeilen im ersten Post.

Dann kommt es zu einer EAccessViolation ... Auf Fortsetzen klicken kommt die nächste, anschliessend kommt, konnte Datei nicht öffnen.

Aber die Datei ist vorhanden....

mkinzler 30. Jul 2006 14:29

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
In welcher Zeile stoppt der Debugger?

DragonsTear 30. Jul 2006 14:31

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Delphi-Quellcode:
            Itemnamen.Items.Assign(ItemListe);
In dieser Spalte

EDIT : Ich habe bei der von marabu geposteten Funktion vor das sOut.Clear ein sOut.Create hinzugefügt damit die Liste auch kreeiert wird...

Delphi-Quellcode:
procedure ExtractNames(sIn, sOut: TStrings);
var
  i: Integer;
begin
  sOut.Create; // von mir hinzugefügt //
  sOut.Clear;
  for i := 0 to Pred(sIn.Count) do
    sOut.Add(sIn.Names[i]);
end;

marabu 30. Jul 2006 14:48

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
So geht das nicht. Wenn du die Namensliste in der Funktion selbst erzeugen möchtest, dann so:

Delphi-Quellcode:
procedure CreateNames(s: TStrings): TStrings;
var
  i: Integer;
begin
  Result := TStringList.Create;
  for i := 0 to Pred(s.Count) do
    Result.Add(s.Names[i]);
end;
marabu

DragonsTear 30. Jul 2006 14:53

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Marabu, kleinen Fehler haste gemacht, das ist jetzt ne Funktion! Aber trotzdem vielen Dank für eure Mühen, da stand ich echt auffm Schlauch....

Dankeschön an alle!

marabu 30. Jul 2006 15:07

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Zitat:

Zitat von DragonsTear
Marabu, kleinen Fehler haste gemacht

Kleine Fehler sind meine Spezialität ...

marabu

DragonsTear 30. Jul 2006 16:42

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Delphi-Quellcode:
function TForm1.CreateTypLists(fn: TFileName; anf : char; ende : char) : TStrings;
var
i, ianf, iende : integer;
s : string;
begin
Result := TStringList.Create;
with Result do
begin
LoadFromFile(fn);
for i := 0 to Pred(Count) do
    begin
    ianf := pos( 'anf' , Strings[i]);
    iende := pos( 'ende' , Strings[i]);
    s := copy(Strings[i], ianf, iende);
    Result.Add(s);
end;
end;
end;
Mich hat der Ehrgeiz gepackt und ich wollte versuchen eine Funktion zu schreiben, die jeweils den Teilstring aus der Datei extrahiert, der bei anf anfängt und bei ende aufhört...

Hm, Problem ist : Es funktioniert nicht, er gibt immer die gesamten Strings aus...

Danke im Vorraus den Helfenden ...

marabu 30. Jul 2006 16:52

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Du gibst als Parameter anf und ende vor, suchst aber nach den Literalen 'anf' und 'ende' - so kann es nicht funktionieren.

marabu

DragonsTear 30. Jul 2006 17:58

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Delphi-Quellcode:
           ItemTypeListe := CreateTypLists(OpenDialog.Filename, #91 , #93 );
           ListBox1.Items.Assign(ItemTypeListe)
Trotz der Richtigstellung mit dem Iteral Fehler funktioniert es immer noch nicht...

Frage : Wenn in der ersten Zeile keines der Zeichen gefunden werdne kann, dann gibt er aber trotzdem für die Zeilen in denen er das Anfangs und Endzeichen findet, den richtigen String aus, oder?

marabu 30. Jul 2006 18:09

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Probiere es mal so:

Delphi-Quellcode:
function TForm1.CreateTypLists(fn: TFileName; cStart, sStop: Char): TStrings;
var
  i, iStart, iStop: Integer;
  s: String;
begin
  Result := TStringList.Create;
  Result.LoadFromFile(fn);
  for i := Pred(Result.Count) downto 0 do
  begin
    iStart := Pos(cStart, Result[i]);
    iStop := Pos(cStop, Result[i]);
    if (iStart = 0) or (iStop < iStart) then
      Result.Delete(i);
  end;
end;
Getippt und nicht getestet.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz