Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Problema al guardar lista en fichero

Hola, intento guardar el contenido de una lista (TListview), pero lo que guarda en el archivo en disco no tiene nada que ver con el contenido de la lista. Por ejemplo, una lista que contiene

[Num. caracteres]: 256
[Clave]: adaiewoi32[$%k,.
[Asociada a]: Google

Y lo que guarda en el archivo en disco es " põ " excluyendo las comillas dobles. Por otra parte, no carga nada al iniciar el programa.
Me ayude de este código, yo lo he implementado para mi caso, cambiando nombre de archivo y extension (mysignature). Alguna idea? un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #2  
Antiguo 28-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mejor que copies exactamente el código que estás usando, si has modificado algo, entonces ya no es el mismo código.
Responder Con Cita
  #3  
Antiguo 28-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Hola,

Cita:
Mejor que copies exactamente el código que estás usando, si has modificado algo, entonces ya no es el mismo código.
Obvio, si cambio en algo el código, ya no es el mismo código, pero es evidente que debo modificar las lineas necesarias para acomodarlo a lo que necesito. El problema es que cuando cambio esas minimas cosas (básicamente el nombre y la extensión del archivo), ya no funciona, aunque si que guarda un archivo con el nombre que yo quiera, su contenido simplemente es "LVF" y no el contenido de la lista.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #4  
Antiguo 28-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por eso mismo hace falta ver tu código, porque si probamos el original, funciona, según comentas.
Responder Con Cita
  #5  
Antiguo 28-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola danielmj.

Tal vez el autor del enlace anterior no haya echo una transcripción totalmente fidedigna...

Intenta usando el código de TORRY's Delphi Pages: ...Save/Load a TListView?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 29-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
hola buenos dias.

perdona que no haya contestado antes pero no sé por que extraña razón, no me ha llegado ninguna notificación a la bandeja del correo. En cuanto a lo que comentas ecfisa, ahora me pongo con ello, aún así a continuación pongo el código tal como lo tengo yo.

Código Delphi [-]
procedure TForm1.SaveLista(AListView: TListView; sFileName: string);
var
  idxItem, idxSub, IdxImage: Integer;
  F: TFileStream;
  pText: PChar;
  sText: string;
  W, ItemCount, SubCount: Word;
  MySignature: array [0..2] of Char;

begin
  // Inicio
  with Lista do
  begin
    ItemCount := 0;
    SubCount  := 0;
    //****
    MySignature := 'cl';
    //  ListViewFile
    F := TFileStream.Create('clvs.cl', fmCreate or fmOpenWrite);
    F.Write(MySignature, SizeOf(MySignature));

    if Items.Count = 0 then
      // List is empty
      ItemCount := 0
    else
      ItemCount := Items.Count;
    F.Write(ItemCount, SizeOf(ItemCount));

    if Items.Count > 0 then
    begin
      for idxItem := 1 to ItemCount do
      begin
        with Items[idxItem - 1] do
        begin
          // Guardamos los SubItems
          if SubItems.Count = 0 then
            SubCount := 0
          else
            SubCount := Subitems.Count;
          F.Write(SubCount, SizeOf(SubCount));
          // Guardamos el Index
          IdxImage := ImageIndex;
          F.Write(IdxImage, SizeOf(IdxImage));
          // Guardamos la Caption
          sText := Caption;
          w     := Length(sText);
          pText := StrAlloc(Length(sText) + 1);
          StrPLCopy(pText, sText, Length(sText));
          F.Write(w, SizeOf(w));
          F.Write(pText^, w);
          StrDispose(pText);
          if SubCount > 0 then
          begin
            for idxSub := 0 to SubItems.Count - 1 do
            begin
              // Guardamos los Items y SubItems
              sText := SubItems[idxSub];
              w     := Length(sText);
              pText := StrAlloc(Length(sText) + 1);
              StrPLCopy(pText, sText, Length(sText));
              F.Write(w, SizeOf(w));
              F.Write(pText^, w);
              StrDispose(pText);
            end;
          end;
        end;
      end;
    end;
    F.Free;
  end;
end;

procedure TForm1.LoadListViewToFile(AListView: TListView; sFileName: string);
var
  F: TFileStream;
  IdxItem, IdxSubItem, IdxImage: Integer;
  W, ItemCount, SubCount: Word;
  pText: PChar;
  PTemp: PChar;
  MySignature: array [0..2] of Char;
  sExeName: string;

begin
  MySignature:= 'cl';
  with AListView do
  begin
    ItemCount := 0;
    SubCount  := 0;

    sExeName := ExtractFileName('clvs.cl');

    if not FileExists('clvs.cl') then
    begin
      MessageBox(Handle, PChar(Format(Msg1, [sExeName])), 'I/O Error', MB_ICONERROR);
      Exit;
    end;

    F := TFileStream.Create('clvs.cl', fmOpenRead);
    F.Read(MySignature, SizeOf(MySignature));

    if MySignature <> 'cl' then
    begin
      MessageBox(Handle, PChar(Format(Msg2, [sExeName])), 'I/O Error', MB_ICONERROR);
      Exit;
    end;

    F.Read(ItemCount, SizeOf(ItemCount));
    Items.Clear;

    for idxItem := 1 to ItemCount do
    begin
      with Items.Add do
      begin
        // Leemos el Index
        F.Read(SubCount, SizeOf(SubCount));
        // Re Leemos el Index
        F.Read(IdxImage, SizeOf(IdxImage));
        ImageIndex := IdxImage;
        // Leemos el Caption
        F.Read(w, SizeOf(w));
        pText := StrAlloc(w + 1);
        pTemp := StrAlloc(w + 1);
        F.Read(pTemp^, W);
        StrLCopy(pText, pTemp, W);
        Caption := StrPas(pText);
        StrDispose(pTemp);
        StrDispose(pText);
        if SubCount > 0 then
        begin
          for idxSubItem := 1 to SubCount do
          begin
            F.Read(w, SizeOf(w));
            pText := StrAlloc(w + 1);
            pTemp := StrAlloc(w + 1);
            F.Read(pTemp^, W);
            StrLCopy(pText, pTemp, W);
            Items[idxItem - 1].SubItems.Add(StrPas(pText));
            StrDispose(pTemp);
            StrDispose(pText);
          end;
        end;
      end;
    end;

    F.Free;
  end;
end;

Siendo las llamadas a estos procedimientos...
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  memo1.Text:= '';
  LoadListViewToFile(Lista, 'clvs.cl');
end;

Código Delphi [-]
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  SaveLista(Lista, 'clvs.cl');
  Lista.Items.Clear;
end;

Esta ultima llamada también la tengo en el OnClose del formulario. Tal como está ahora, me guarda un archivo tal como yo quiero (nombre y extensión) pero el contenido del archivo es "FLV" por lo que no tiene nada que ver con la lista.

Bueno, voy a mirar la web de torrys a ver que tal.
Un saludo y gracias.

Edito: Si mal no veo, el código que he puesto antes es igual que el de la web de torrys, salvando las diferencias en cuanto a nombre de archivo y extensión y un "if" dentro de la carga del archivo, por lo que sigo igual. No sé por que dentro del archivo escribe "LVF"
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.

Última edición por danielmj fecha: 29-11-2014 a las 12:07:57.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
[qreport]-.qrp quitar de lista guardar jonydread Impresión 0 30-05-2013 06:58:12
Guardar un fichero Intelhex. JoseFco ASM y Microcontroladores 20 12-06-2008 18:13:26
Guardar palabras en una lista dinamica mcalmanovici Varios 1 19-12-2007 19:22:37
guardar en 1 fichero 1 tabla adaypr C++ Builder 2 09-09-2006 10:29:10
Guardar un fichero Excel auxifs Servers 2 16-06-2003 16:50:47


La franja horaria es GMT +2. Ahora son las 12:01:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi