powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDac чтение из CSV не признает aFloat тип колонки
8 сообщений из 8, страница 1 из 1
FireDac чтение из CSV не признает aFloat тип колонки
    #40095851
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При чтении через компонент FDBatchMoveTextReader из CSV файла не признает тип данных из колонки как aFloat, если в первой строке файла значение в этой ячейке целочисленное. В настройках Mapping все определяю как aFloat.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
---------------------------
Debugger Exception Notification
---------------------------
Project *** raised exception class EConvertError with message ''23.4' is not a valid integer value'.
---------------------------
Break   Continue   Help   
---------------------------



(в примере To_m = 10, в таблице назначения это поле определено как Float, в общем случае значения этого поля почти всегда с десятичной цифрой, поэтому поле объявлено как Float)

пример CVS файла:

Id,From_m,To_m,Color
1,0,10,Red
2,10,23.4,Blue
3,23.4,50,Green

Как костыль, иду в файл и принудительно пишу вместо 10 10.001, тогда срабатывает.

Если нет способа управлять через код, придется обходиться без этого компонента
...
Рейтинг: 0 / 0
FireDac чтение из CSV не признает aFloat тип колонки
    #40095861
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander2

Как костыль, иду в файл и принудительно пишу вместо 10 10.001, тогда срабатывает.

В качестве бреда, а почему не попробовать записать вместо "10", "10.0"?
...
Рейтинг: 0 / 0
FireDac чтение из CSV не признает aFloat тип колонки
    #40095909
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander2
В настройках Mapping все определяю как aFloat.
Заводи тикет в EMBT-шном трекере...
...
Рейтинг: 0 / 0
FireDac чтение из CSV не признает aFloat тип колонки
    #40095940
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander2,

Судя по сообщению, компонент сам определяет типы данных на основании первой строки. Может это можно как-то отключить?
...
Рейтинг: 0 / 0
FireDac чтение из CSV не признает aFloat тип колонки
    #40095993
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он же говорит, что задал маппинг.
Хотя возможна там есть какая-то
опция типа AutoMapping типов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDac чтение из CSV не признает aFloat тип колонки
    #40096011
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure TFDBatchMoveTextReader.Open(AStartTx: Boolean);
var
  i: Integer;
begin
  FEof := False;
  SetLength(FBuff, 1024);
  if Stream <> nil then
    FText := TFDTextFile.Create(Stream, False, True, False, Encoding, DataDef.EndOfLine)
  else
    FText := TFDTextFile.Create(ActualFileName, True, False, Encoding, DataDef.EndOfLine);
  if BatchMove.Analyze <> [] then begin  // <---------
    GuessFormat(FText, BatchMove.Analyze); // <---------
    FText.Stream.Position := 0;
    if DataDef.Fields.Count = 0 then
      FDException(BatchMove, [S_FD_LComp, S_FD_LComp_PDM], er_FD_DPNoTxtFlds, []);
  end;
  if DataDef.RecordFormat = rfFixedLength then
    for i := 0 to DataDef.Fields.Count - 1 do
      if DataDef.Fields[i].FieldSize < 0 then
        FDException(BatchMove, [S_FD_LComp, S_FD_LComp_PDM], er_FD_DPBadFixedSize,
          [DataDef.Fields[i].FieldName]);
end;


Ну как бы вот: "if BatchMove.Analyze <> [] then begin"
...
Рейтинг: 0 / 0
FireDac чтение из CSV не признает aFloat тип колонки
    #40096151
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat, DimaBr,

Спасибо за поиск решения.

В моем (и в общем случае) случае оно сводится к тому, что перед выполнением Batch.Execute запретить анализировать входящие поля, предварительно назначив всем колонкам String тип.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
            My_Reader.FileName := SourceFile;
            My_Batch.GuessFormat([taDelimSep, taFields]);
            for i := 0 to My_Reader.DataDef.Fields.Count-1 do
             begin
              My_Reader.DataDef.Fields[i].DataType := atString;        // Set all field data type as string
             end;
            My_Batch.Analyze := [];   //       сброс настроек анализа
            My_Batch.Execute;
...
Рейтинг: 0 / 0
FireDac чтение из CSV не признает aFloat тип колонки
    #40096154
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander2
rgreat, DimaBr
Спасибо за поиск решения.

Это моё ПЕРВОЕ сообщение в данной ветке
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDac чтение из CSV не признает aFloat тип колонки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]