Einzelnen Beitrag anzeigen

aaaaaaaaaa_10
(Gast)

n/a Beiträge
 
#36

Re: Spaltenweise auf TStringList zugreifen

  Alt 29. Jul 2009, 08:02
Tausden dank. Ich poste mal den Code:

Delphi-Quellcode:
procedure ZehnMinTimerEvent(Sender: TObject);
var
  Sek, Min, ZwSpeicher : TStringList;
  DreiSek, ZehnMin,Temp, temp1, temp2, DatUhr, Datei : string;
  TabPos, Spaltenanzahl, Zeilenanzahl,s, z : integer;
  StringArray: array of array of string;
  TestDatei : TFileStream;
begin
  DreiSek := extractfilepath(application.exename)+'Mom3sek_'+Kennung+'.txt';
  ZehnMin := extractfilepath(application.exename)+'Mom10min_'+Kennung+'.txt';
  TestDatei := TFileStream.Create(ExtractFilePath(application.exename)+'test.txt', fmCreate or
  fmOpenReadWrite);

  Sek := TStringList.Create;
  Min := TStringList.Create;
  ZwSpeicher := TStringList.Create;

  try
    Sek.LoadFromFile(DreiSek);
    Min.LoadFromFile(ZehnMin);

    temp1 := Sek.Strings[Sek.Count-1]; //letzte Zeile der 3SekDatei
    temp2 := Min.Strings[Min.Count-1]; //letzte Zeile der 10MinDatei

    while Min.Count >= 2 do //maximal 1 Zeile + Header
      Min.Delete(1);

    if temp1 <> temp2 then
    begin
      TabPos := posEx(#9,temp1,13);
      if TabPos <> 0 then
      begin
        DatUhr := Copy(temp1,0,TabPos); //Datum und Uhrzeit einfügen
        ZwSpeicher.Delimiter := #9;
        if Sek.Count >= 2 then //ab der 1.Zeile + Header anfangen
        begin
          ZwSpeicher.DelimitedText := Sek.Strings[Sek.Count-1];

          Spaltenanzahl := ZwSpeicher.Count-2; //ohne Datum und Uhrzeit
          Zeilenanzahl := Sek.Count-1; //ohne Header
          Setlength(StringArray,Spaltenanzahl,Zeilenanzahl);
          begin
            z := Zeilenanzahl-1;
            begin;
              for s := 0 to Spaltenanzahl-2 do
              begin
                StringArray[s,z] := ZwSpeicher.Strings[s+2];
                Temp := (StringArray[s,z]) + ';';
                TestDatei.Write(PChar(Temp)^,Length(Temp));
              end;
             StringArray[Spaltenanzahl-1,z] := ZwSpeicher.Strings[ZwSpeicher.Count-1];
             Temp := (StringArray[Spaltenanzahl-1,z]) + #13#10;
             TestDatei.Write(PChar(Temp)^,Length(Temp));
            end;
          end;
         end;
        Min.Add(DatUhr);
      end;
     Min.SaveToFile(ZehnMin);
    end;
  finally
    TestDatei.Free;
    ZwSpeicher.Free;
    Min.Free;
    Sek.Free;
  end;
end;
Ich denke, es sollte so fast stimmen. Allerdings wird immernoch nur eine neue zeile in die datei geschrieben und nicht wie gewollt die neue unter die alte gehängt
  Mit Zitat antworten Zitat