Zapis ListView do pliku...

0

Siemka mam problemik, a mianowicie korzystałem z procedurki ze strony http://www.swissdelphicenter.ch/torry/showcode.php?id=729 do zapisu ListView do pliku, ale niewiem dlaczego w zapisanym pliku bylo pełno niepotrzebnych znaków []. Chwile potem znalazłem w Downloadzie 4p komponent ListViewSaver, i tu zaczyna się mój problem, może ktoś wie, jak go obsłużyć ? NIE MA żadnego dema, nic dzieki czemu mógłbym sie dowiedzieć jak zapisać ListView1 do pliku.txt za pomocą SaveDialog :( Wiem, że mam użyć:

if SaveDialog1.Execute then
tylko co tutaj ?

Bardzo proszę o pomoc, ja się z tym męcze ale jak na razie to kicha :(

0

Skorzystaj z strumieni.. po co się tak męczyć skoro są strumienie!

0

Hmmm strumieni powiadasz, ja jestem dopiero początkującym programistą i we wszystkich książkach jakie posiadam nic NIE MA o strumieniach, czyba będę musiał jeszcze o tym gdzieś poczytać, ale dzięki za informację :)

0

Zerknij w artykuły.

0

Rolrain , strumienie to chyba najprostsze klasy a dodatowo bardzo uzyteczne - sam ustalasz co i jak chcesz zapisac a potem zgodnie z tym co sobie ustaliles odczytujesz - jest przy tym read , write i position , naprawde nic trudnego.

0

Probowałem trochę się pobawić z tym, ale nadal w pliku.txt z wartościami ListView mam niepotrzebne znaczki [] :( MOże ktoś wie jak to ominąć, albo wie, gdzie jest jakiś Tips jak to zrobić ?

0

Zapis:

var
  FileStream : TFileStream;

begin
  if FileExists(ExtractFileDir(Application.ExeName) + '\str.dat') then // jezeli istnieje plik
  FileStream := TFileStream.Create(ExtractFileDir(Application.ExeName) + '\str.dat', fmOpenWrite) else
  FileStream := TFileStream.Create(ExtractFileDir(Application.ExeName) + '\str.dat', fmCreate); //w przeciwnym wypadku stworz plik
  FileStream.WriteComponent(TreeView1); 
  FileStream.Free;
end;

Odczyt:

var
  FileStream : TFileStream;

begin
  if not FileExists(ExtractFileDir(Application.ExeName) + '\str.dat') then Exit; 
  FileStream := TFileStream.Create(ExtractFileDir(Application.ExeName) + '\str.dat', fmOpenRead); //otworz tylko do odczytu
  FileStream.ReadComponent(TreeView1); // odczytaj ustawienia komponentu
  FileStream.Free;
end;

...z pliku str.dat w katalogu z programem

0

Właśnie z tego wychodzi to samo co z tego co zrobiłem sam, a mianowicie:
TPF0 TListView ListView1LeftTop Width_Heightâ AnchorsakLeftakTopakRightakBottom ...

Więc dlatego wolałem użyć już zrobionego komponentu, tylo niewiem za nic jak użyć tego ListViewSaver :(

0

lol, napisz se cos wlasnego na plikach txt lub sciagnij cos z tad:

http://www.torry.net/pages.php?id=144

0

TSaveListView v.1.21 - zawalisty komponencik, takiego mi brakowało, tyle że niewiem jak wyłączyć to, że podczas wychodzenie z mojego programu żeby sie niepytalo czy zapisać ListView do pliku ;/ troche to denerwuje wolał bym to robić tylko manualnie :)

0

<font color="green">Właśnie z tego wychodzi to samo co z tego co zrobiłem sam, a mianowicie:
TPF0 TListView ListView1LeftTop Width_Heightâ Anchors akLeftakTopakRightakBottom ...</span>

A jak to widzisz? . nie otwieraj tego notatnikiem!! Po prostu użyj tej procedury i zobacz!

0

Ale to właśnie chodziło o to, żeby ListView ładnie w kolumnach zapissywało do plików txt które mają być otwarte notatnikiem :) Jak już mówiłem komponent TSaveListView v.1.21 spełnia moje wszystkie oczekiwania, tylko niewiem jak wyłączyć te zapytanie o zapisywanie przy wyjściu, może ktoś go zainstaluje i by mi pomógł :D Bardzo bym prosił.

0

Ale problemy.. Nie wiem czy dziala bo pisalem na stronie, ale latwo mozna to poprawic:

procedure SaveItemsToFile(var ListView: TListView; FileName: String);
var
  q, w: Integer;
  Code: TStringList;
  Line: String;
begin
  Code:= TStringList.Create;
  for q := 0 to ListView.Items.Count -1 do begin
    Line := ListView.Items[q].Caption;
    for w := 0 to ListView.Items[q].SubItems.Count -1 do
      Line := Line + ';' + ListView.Items[q].SubItems[w];
    Code.Add(Line);
  end;
  Code.SaveToFile(FileName);
  Code.Free;
end;

procedure LoadItemsFromFile(var ListView: TListView; FileName: String);
var
  q, w: Integer;
  Code, Temp: TStringList;
  Line: String;
begin
  Code:= TStringList.Create;
  Code.LoadFromFile(FileName);
  for q := Code.Count -1 do begin
    Temp := TStringList.Create;
    Explode(Code[q], ';', Temp);
    with ListView.Items.Add do begin
      Caption := Temp[0];
      if Temp.Count > 1 then
        for w := 1 to Temp.Count -1 do
          SubItems.Add(Temp[w]);
    end;
    Temp.Free;
  end;
  Code.Free;
end;

procedure Explode(s: String; Dot: Char; var Buffer: TStringList);
begin
  Buffer.Clear;
  while Pos(Dot, s) <> 0 do begin
    Buffer.Add(Copy(s, 1, Pos(Dot, s) - 1));
    s := Copy(s, Pos(Dot, s) + 1, Length(s) - Pos(Dot, s));
  end;
  if Length(s) > 0 then begin
    Buffer.Add(s);
  end;
end;
0

No mistrzu wielkie dzięki, właśnie o takie coś mi chodziło [browar] :)

0

A i jeszcze jedno, jak zmodyfikować ten kod:

procedure SaveItemsToFile(var ListView: TListView; FileName: string);
var
q, w: Integer;
Code: TStringList;
Line: string;
begin Application.ProcessMessages;
Code:= TStringList.Create;
for q := 0 to ListView.Items.Count -1 do begin
Line := ListView.Items[q].Caption;
for w := 0 to ListView.Items[q].SubItems.Count -1 do
Line := Line + ' | ' + ListView.Items[q].SubItems[w];
Code.Add(Line);
end;
Code.SaveToFile('text.txt');
Code.Free;
end;

Żeby plik text.txt brał z SaveDialog, if SaveDialog1.Execute then chyba odpada, ponieważ niemam jak tego tam wsadzić, może ktoś mi jescze tylko to powiedzeić ? :)

0

Jaki problem?

if SaveDialog.Execute then
  SaveItemsToFile(ListView1, SaveDialog.FileName;
0

wszystko sie da :)

procedure SaveItemsToFile(var ListView: TListView; FileName: string);
var
   q, w: Integer;
   Code: TStringList;
   Line: string;
begin    
if form1.savedialog1.execute then
begin
Application.ProcessMessages;
   Code:= TStringList.Create;
   for q := 0 to ListView.Items.Count -1 do begin
      Line := ListView.Items[q].Caption;
      for w := 0 to ListView.Items[q].SubItems.Count -1 do
         Line := Line + ' | ' + ListView.Items[q].SubItems[w];
      Code.Add(Line);
   end;
   Code.SaveToFile(form1.savedialog1.filename);
   Code.Free;
end;
end;

//wolverine mnie wyprzedzil, i ma lepszy kodzik :)
z tym ze musialbys zmienic wtedy procke, zamiast 'text.txt' wpisz filename, inaczej nie zadziala sposob wolverina

0

OK, wielkie dzięki Wam 2 - dzięki Wam to wreszcie działa :)

0

A Nie Lepiej Ściągnąc Z Torry Delphi Komponencik AdvListview
Zapisujesz ListView jedną linijką. To było już na forum.
Można zapisać do .doc ,.xls i do kilku jescze

1 użytkowników online, w tym zalogowanych: 0, gości: 1