AGB  ·  Datenschutz  ·  Impressum  







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

fehler mit Pos() ?

Ein Thema von sharkx · begonnen am 26. Nov 2003 · letzter Beitrag vom 26. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#1

fehler mit Pos() ?

  Alt 26. Nov 2003, 01:44
Hallo,

Ich lese eine Text Datei mit LoadFromFile in eine StringListe. Diese lasse ich dann durch eine Schleife laufen und füge alle zeilen die nicht mit ; oder ' ' (leerzeichen) beginnen in eine neue StringList.

Die Procedure:
Delphi-Quellcode:
function CreateStringList(SFVFile: string): string;
var
  OldList: TStrings;
  NewList: TStrings;
  i: integer;
begin
  NewList := TStringList.Create;
  OldList := TStringList.Create;

  OldList.LoadFromFile(SFVFile);

  for i := 0 to OldList.Count - 1 do
    begin
      if (Pos(';', OldList.Strings[i]) = 1) or (Pos(' ', OldList.Strings[i]) = 1) then
        Continue
      else
        NewList.Add(OldList.Strings[i]);
    end;
    
  OldList.Free;
  Result := NewList.CommaText;
end;

die SFV File, von der gelsen wird sieht etwa so aus:
Delphi-Quellcode:
; sfv raped by project-zs (mXr edition)

;

datei a bissel text
das ganze nochmal
und nochmal
Jedesmal wenn ich eine sfv file lade, die diese ; sfv rapped ... Commends hat, stimmem die Strings in der StringListe nicht mehr.
Wo steckt mein fehler?

Danke :-)
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#2

Re: fehler mit Pos() ?

  Alt 26. Nov 2003, 02:15
Moinsen,

versuche das ganze mal so:

Delphi-Quellcode:
var SFVFile: TStringList;
    i: Integer;
begin
  SFVFile := TStringList.Create;
  SFVFile.LoadFromFile(SFVFileName);

  for i := SFVFile.Count - 1 downto 0 do
  begin
    SFVFile[i] := Trim(SFVFile[i]);
    if (Length(SFVFile[i]) = 0) or (SFVFile[i][1] = ';') then
      SFVFile.Delete(i);
  end;

  Result := SFVFile.CommaText;
  SFVFile.Free;
end;
Gruß

Wormid
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: fehler mit Pos() ?

  Alt 26. Nov 2003, 03:13
Zu aller erst würde ich die if-bedingung ändern:
Delphi-Quellcode:
if not ((Pos(';', OldList.Strings[i]) = 1) or (Pos(' ', OldList.Strings[i]) = 1)) then
  NewList.Add(...);
Damit sparst du dir dieses Rumgehopse in der Schleife mit dem Continue.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: fehler mit Pos() ?

  Alt 26. Nov 2003, 10:39
@WormId: Das funktioniert nicht, da diese function in einer Schleife läuft die bis SFVFile.Count läuft. Wenn ich dann Strings abschneiden würde, stimmt der Count nicht mehr und ich bekomm eine Exception.

@Luckie: Stimmt, hast Recht, aber das Problem is damit nicht behoben.



Mit dem Inhalt der StringList erstelle ich jeweils für einen Eintrag eine neue Datei.

Delphi-Quellcode:
procedure CreateMissing(FileList: TStrings; Directory: String);
var
  i: integer;
begin
  for i := 0 to FileList.Count - 1 do
    begin
      dump := Copy(FileList.Strings[i], 1,Pos(' ', FileList.Strings[i]) - 1);
      FileClose(FileCreate(directory + dump + '-missing'));
    end;
end;
Wenn jedoch ; Kommentare in der alten StringList war, dann erstellt er mir 1 -missing file die nicht sein dürfte. Der Rest stimmt alles.
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: fehler mit Pos() ?

  Alt 26. Nov 2003, 10:49
Arg Stop!, Ich hab das Problem gefunden ..
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: fehler mit Pos() ?

  Alt 26. Nov 2003, 14:01
Problem doch nicht behoben...

Wenn jmd den fehler sieht, pls help :-)
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#7

Re: fehler mit Pos() ?

  Alt 26. Nov 2003, 14:19
Zitat:
@WormId: Das funktioniert nicht, da diese function in einer Schleife läuft die bis SFVFile.Count läuft. Wenn ich dann Strings abschneiden würde, stimmt der Count nicht mehr und ich bekomm eine Exception.
Ich verstehe nicht so ganz, warum "meine" Variante nicht funktionieren soll...

Was läuft in einer Schleife ab, und auf welches Count beziehst Du dich jetzt? Eines in deinem Code irgendwo, oder in meinem Beispiel jetzt?
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: fehler mit Pos() ?

  Alt 26. Nov 2003, 14:25
Delphi-Quellcode:
CheckList := TStringList.Create;
  CheckList.CommaText := CreateStringList(ParamStr(1));

  dir := ExtractFilePath(ParamStr(1));

  // Create Missing Files
  CreateMissing(CheckList, dir);

  // Create Incomplete File
  CreateIncompleteFile(dir);

  for i := 0 to CheckList.Count - 1 do
    begin
    filen := Copy(CheckList.Strings[i], 1,Pos(' ', CheckList.Strings[i]) - 1);

    if FileExists(dir + filen) then
......
die Function CreateMissing steht weiter oben in diesem Tread.

die function CreateStringList sieht nun wie filgt aus:
Delphi-Quellcode:
function CreateStringList(SFVFile: string): string;
var
  OldList: TStrings;
  NewList: TStrings;
  i: integer;
begin
  NewList := TStringList.Create;
  OldList := TStringList.Create;

  OldList.LoadFromFile(SFVFile);

  for i := 0 to OldList.Count - 1 do
    if (Length(Trim(OldList.Strings[i])) > 0) and (OldList.Strings[i][1] <> ';') then
      NewList.Add(OldList.Strings[i]);

  OldList.Free;
  Result := NewList.CommaText;
end;
Trotzdem habe ich ab und an noch eine -missing datei die garnicht da sein dürfte. Somit stimmem auch alle weiteren Proceduren die auf den beiden functionen aufbauen überhaupt nicht mehr.
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#9

Re: fehler mit Pos() ?

  Alt 26. Nov 2003, 14:38
Hast du mal ein SFVFile da? Denn mit meinem Testfile funktionuckelt das...
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: fehler mit Pos() ?

  Alt 26. Nov 2003, 16:51
sicher doch ...
Angehängte Dateien
Dateityp: txt sgt-teuflisch.sfv.txt (2,5 KB, 6x aufgerufen)
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  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 17:38 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