импорт csv в StringGrid кодировка

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

импорт csv в StringGrid кодировка

Сообщение wofs » 29.01.2011 11:59:55

день добрый, проблема
загружаю файл csv в StringGrid и получаю вместо кириллических символов вопросы. Делаю так:
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Grids, ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    od: TOpenDialog;
    Panel1: TPanel;
    Panel2: TPanel;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}
procedure GridColAutoSize( Grid:TStringGrid );
var
  nCol, nRow, nWidth, nMaxWidth: integer;
begin
  with Grid as TStringGrid do
  begin
    for nCol := 0 to ColCount - 1 do
    begin
      nMaxWidth := 0;
      for nRow := 0 to RowCount - 1 do
      begin
        nWidth := Canvas.TextWidth( Cells[nCol,nRow] );
        if nWidth > nMaxWidth then nMaxWidth := nWidth;
      end; {for nRow}
      ColWidths[nCol] := nMaxWidth + 7;
    end; {for nCol}
  end; {with Grid}
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  oFileStrings:TStringList;
  oRowStrings:TStringList;
  i:integer;

begin
  oFileStrings := TStringList.Create;
  oRowStrings := TStringList.Create;
  try
    StringGrid1.FixedCols := 1;
    StringGrid1.FixedRows := 1;
    StringGrid1.RowCount := 2;
    StringGrid1.ColCount := 2;
    if od.Execute then f:=od.FileName else exit;
    oFileStrings.LoadFromFile('C:\filename.csv');
    StringGrid1.RowCount := oFileStrings.Count;
    for i := 0 to oFileStrings.Count - 1 do
    begin
      oRowStrings.Clear;
      oRowStrings.CommaText := oFileStrings[i];
      oRowStrings.Insert(0,IntToStr(i));
      if oRowStrings.Count > StringGrid1.ColCount then
        StringGrid1.ColCount := oRowStrings.Count;
      StringGrid1.Rows[i].Assign(oRowStrings);
    end;
    StringGrid1.Cells[0,0] := '';
    GridColAutoSize( StringGrid1 );
  finally
    oFileStrings.Free;
    oRowStrings.Free;
  end;
end;

end.
                             

понимаю что нужно как то сконвертировать, но не представляю как.
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: импорт csv в StringGrid кодировка

Сообщение Brainenjii » 29.01.2011 12:29:49

LCL использует кодировку UTF-8. Так что попробуйте так:
Код: Выделить всё
...
    oFileStrings.LoadFromFile('C:\filename.csv');
    oFileStrings.Text := Utf8Encode(oFileStrings.Text);
    StringGrid1.RowCount := oFileStrings.Count;
...
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: импорт csv в StringGrid кодировка

Сообщение wofs » 29.01.2011 12:36:42

Ха, спасибо огромное!!
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru