Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi bei datei laden ';' ignorieren... (https://www.delphipraxis.net/60342-bei-datei-laden-%3B-ignorieren.html)

Headi 5. Jan 2006 15:06


bei datei laden ';' ignorieren...
 
Hallo Leute,

Also ich habe es einfach noch nicht hingekriegt mein Problem zu lösen.
Ich habe eine datei, in der die zeilen, die mit ";" beginnen nicht geladen werden dürfen.
Jetzt nur wie ignoriere ich diese Zeilen?
Ich lade jetzt die daten in ein stringgrid, nur möchte ich ungerne meinen ganzen code umschreiben.
Nur wie mache ich das jetzt?

ich denke mit RightStr und LeftStr sollte ich einfach an das erste zeichen rankommen, aber wie sag ich dass er dann diese zeile nicht laden darf?
Naja ich denke ihr wisst schon was ich meine.

Hier mal mein code zum laden der Daten:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); //sfv file öffnen
var
  i : integer;
begin

  if OpenDialog1.Execute then
   begin
    SL.LoadFromFile(OpenDialog1.FileName);     //sfv daten in stringlist speichern
    SL.Delimiter :=' ';

    SLSub.Clear;

    StringGrid1.RowCount:=SL.Count+1;   //stringgrid zeilen erstellen

    for I := 0 to SL.Count - 1 do
     begin
      SLSub.DelimitedText := SL[I];

      StringGrid1.Cells[0, (1+(I))]:=SlSub[0]; //dateiname in stringgrid einfügen
      StringGrid1.Cells[2, (1+(I))]:=Uppercase(SlSub[1]); //hash wert in stringgrid einfügen
      StringGrid1.Cells[1, (1+(I))]:='ready';  //status gleich ready
     end;

    //SLSub.Free;

    //sl.Free;
    Button2.Enabled:=true;
    Button4.Enabled:=false;
   end;
end;
hoffe ihr könnt mir eine bei einer Lösung helfen, die nicht den ganzen code verändert.

vielen dank schonmal

greez headi

marabu 5. Jan 2006 15:11

Re: bei datei laden ';' ignorieren...
 
Hallo Headi,

ohne deinen sonstigen Code zu verändern? Du kannst die Zeilen direkt nach dem LoadFromFile() entfernen:

Delphi-Quellcode:
procedure DeleteComments(s: TStrings; meta: char);
var
  i: integer;
begin
  for i := Pred(s.Count) downto 0 do
    if Copy(s[i], 1, 1) = meta then
      s.Delete(i);
end;
Nur eine von vielen möglichen Lösungen für dein Problem.

Neujahrsgrüße vom marabu

Martin K 5. Jan 2006 15:22

Re: bei datei laden ';' ignorieren...
 
Hier mein Vorschlag:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); //sfv file öffnen
var
  i : integer;
begin

  if OpenDialog1.Execute then
   begin
    SL.LoadFromFile(OpenDialog1.FileName);     //sfv daten in stringlist speichern

    //ergänzt:
    i := 0;
    While i < SL.Count do
    begin
      If SL[i][1] = ';' then SL.Delete(i)
      else Inc(i);
    end;

    SL.Delimiter :=' ';

    SLSub.Clear;

    StringGrid1.RowCount:=SL.Count+1;   //stringgrid zeilen erstellen

    for I := 0 to SL.Count - 1 do
     begin
      SLSub.DelimitedText := SL[I];

      StringGrid1.Cells[0, (1+(I))]:=SlSub[0]; //dateiname in stringgrid einfügen
      StringGrid1.Cells[2, (1+(I))]:=Uppercase(SlSub[1]); //hash wert in stringgrid einfügen
      StringGrid1.Cells[1, (1+(I))]:='ready';  //status gleich ready
     end;

    //SLSub.Free;

    //sl.Free;
    Button2.Enabled:=true;
    Button4.Enabled:=false;
   end;
end;

dahead 5. Jan 2006 15:25

Re: bei datei laden ';' ignorieren...
 
warum nicht einfach in der schleife, die eh schon da ist?

Delphi-Quellcode:
for I := 0 to SL.Count - 1 do
  begin
   if SL[I][1] = ';' then // Wenn 1. Zeichen = ';'
    Continue; // dann weiter

   SLSub.DelimitedText := SL[I];

   StringGrid1.Cells[0, (1+(I))]:=SlSub[0]; //dateiname in stringgrid einfügen
   StringGrid1.Cells[2, (1+(I))]:=Uppercase(SlSub[1]); //hash wert in stringgrid einfügen
   StringGrid1.Cells[1, (1+(I))]:='ready';  //status gleich ready
  end;

Martin K 5. Jan 2006 15:31

Re: bei datei laden ';' ignorieren...
 
Jo, stimmt. Das geht auch:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); //sfv file öffnen
var
  i : integer;
begin

  if OpenDialog1.Execute then
   begin
    SL.LoadFromFile(OpenDialog1.FileName);     //sfv daten in stringlist speichern
    SL.Delimiter :=' ';

    SLSub.Clear;

    StringGrid1.RowCount:=SL.Count+1;   //stringgrid zeilen erstellen

    for I := 0 to SL.Count - 1 do
     begin
      if SL[I][1] <> ';' then // <-- hier ergänzen
       begin                  // <-- hier auch ergänzen
        SLSub.DelimitedText := SL[I];

        StringGrid1.Cells[0, (1+(I))]:=SlSub[0]; //dateiname in stringgrid einfügen
        StringGrid1.Cells[2, (1+(I))]:=Uppercase(SlSub[1]); //hash wert in stringgrid einfügen
        StringGrid1.Cells[1, (1+(I))]:='ready';  //status gleich ready
       end;                  // <-- und hier ergänzen
     end;

    //SLSub.Free;

    //sl.Free;
    Button2.Enabled:=true;
    Button4.Enabled:=false;
   end;
end;

Headi 5. Jan 2006 16:03

Re: bei datei laden ';' ignorieren...
 
Vielen vielen dank Euch allen!!
Hab zuerst den letzten code probiert, den habe ich allerdings nicht hingekriegt.
Also habe ich den ersten code von Martin K genommen, der funktioniert perfekt!!

vielen dank

mfg headi

Martin K 5. Jan 2006 16:07

Re: bei datei laden ';' ignorieren...
 
Mein erster Code funktioniert natürlich genauso, allerdings kann es bei großen Dateien länger Dauern, da die Schleife 2x durchlaufen wird.
Am besten ist es, wenn du meinen letzten aus Beitrag #5 nimmst, wahrscheinlich hast du nur begin oder end vergessen.
Ich hab dir nochmal an jede ergänzte Zeile den Kommentar drangemacht.
Ich würde diesen Code aus #5 dann nehmen, da er schneller ist.

Insgesamt sind 3 Zeilen zu ergänzen, am besten ersetzt du den kompletten Code via Kopieren und Einfügen, dann kannste nix falsch machen.

Gruß, Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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