Ir al contenido


Foto

Delphi D7-XE2. Mismo Codigo, CSV Diferente

delphi csv D7 XE2

  • Por favor identifícate para responder
3 respuestas en este tema

#1 palmaprix

palmaprix

    Newbie

  • Miembros
  • Pip
  • 7 mensajes

Escrito 03 abril 2015 - 03:02

Hola
El siguiente codigo es para crear un archivo CSV
desde datos en una Base de Datos, en este caso particular MS SQL 2012
El codigo corre bien en D7 y en XE2 pero...
 
El CSV creado por XE2 tiene juego de caracteres UNICODE
El CSV creado por D7 juego de caracteres ISO-8859-1
 
Un 3er programa debe leer este CSV y al leer el de UNICODE aparecen caracteres raros entre cada caracter
sin embargo el CSV creado por D7 esta perfecto
 
Esto se puede comprobar al leerlo a traves de OpenOffice Calc
Ya he cambiado los string de XE2 para que sean compatibles con D7 y hasta la fecha sigue el problema
 
Parece que no quieren que abandone el D7,
 
 

delphi
  1. var
  2.   Stream: TFileStream;
  3.   i: Integer;
  4.   OutLine: string;
  5.   sTemp: string;
  6.  
  7. begin
  8.   adodProducto.Open;
  9.   Stream := TFileStream.Create('producto.csv', fmCreate);
  10.   OutLine := '';
  11.   OutLine := 'Referencia;Categoria;Nombre;Fabricante;';
  12.   SetLength(OutLine, Length(OutLine) - 1);
  13.   Stream.Write(OutLine[1], Length(OutLine) * SizeOf(Char));
  14.   Stream.Write(sLineBreak, Length(sLineBreak));
  15.   adodProducto.First;
  16.   while not (adodProducto.Eof) do
  17.   begin
  18.     OutLine := '';
  19.     for i := 0 to adodProducto.FieldCount - 1 do
  20.       begin sTemp := adodProducto.Fields[i].AsString;
  21.         sTemp := stringreplace(Stemp, '#38;', '<br>', [rfReplaceAll, rfIgnoreCase]);
  22.         OutLine := OutLine + sTemp + ';';
  23.       end;
  24.     SetLength(OutLine, Length(OutLine) - 1);
  25.     Stream.Write(OutLine[1], Length(OutLine) * SizeOf(Char));
  26.     Stream.Write(sLineBreak, Length(sLineBreak));
  27.     adodProducto.Next;
  28.   end;
  29.   Stream.Free;
  30.   adodProducto.Close;
  31. end;

 
 
 
Saludos
  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 03 abril 2015 - 04:15

¿Probaste usando AnsiString en vez de Strings, y AnsiChar en vez de Char? :huh:


  • 1

#3 palmaprix

palmaprix

    Newbie

  • Miembros
  • Pip
  • 7 mensajes

Escrito 03 abril 2015 - 08:51

Utilice AnsiString pero no AnsiChar, faltaria esa prueba,

gracias, pruebo y les digo


  • 0

#4 palmaprix

palmaprix

    Newbie

  • Miembros
  • Pip
  • 7 mensajes

Escrito 22 junio 2015 - 11:13

Disculpen por a demora en hacer las pruebas

Como funcionaba bien con D7 lo deje asi hasta ahora

que ya he terminado el sistema y decido finalmente

poner todo en orden antes de entregar.

 

No fue suficiente con AnsiString y AnsiChar

con esto habia una mejoria ya no creaba un CSV en UNICODE

sino en UNICODE(UTF-8)

 

Mi objetivo era un CSV iso-8859-1

tuve que utilizar

type
  Iso88591String=type ansistring(28591);

 

y las variables tipo String (AnsiString)  llevarlas todas a  Iso88591String

asi obtengo un CSV iso-8859-1

 

Saludos


  • 0





Etiquetado también con una o más de estas palabras: delphi, csv, D7, XE2

IP.Board spam blocked by CleanTalk.