powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Import form UTF8 txt
2 сообщений из 2, страница 1 из 1
Import form UTF8 txt
    #39078459
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток,

возникла нужда импортировать GEO данные] http://download.geonames.org/export/dump/ из UTF8 текстовика с разделителями табуляцией в табличку (ссылку на GEO zip привел выше, формат таблички в которую портирую привожу ниже как и импорт скрипт генерируемый IBExpert)
неважно какой txt файл пытаюсь импортировать (напр из AZ.zip AZ.txt) IBExpert умирает навсегда, по крайней мере на сутки . Приходится прибивать весь IB Expert задачу через таск менеджер. Умирает ещё в момент когда пытается показать превью данных.
Если эту же табличку конвертирую в Excel 2003 то импорт проходит.
Исходный текстовик судя по доке в UTF8, текстовые поля с интернациональными символами я тоже сделал в UTF8 дабы не возникало коллизий.

В результате танцев выяснилось что причиной всему символ конца строки в текстовике (надо было выставить LF).
Хорошо бы в будующем предусмотреть какой то контроль, дабы не возникало вечного зависания в такой ситуации. Пока разобрался убил 2 часа.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
/******************************************************************************/
/****              Generated by IBExpert 15.10.2015 16:33:16               ****/
/******************************************************************************/

/******************************************************************************/
/****     Following SET SQL DIALECT is just for the Database Comparer      ****/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/



CREATE TABLE GEONAME (
    GEONAMEID          INTEGER NOT NULL,
    NAME               VARCHAR(200) CHARACTER SET UTF8,
    ASCIINAME          VARCHAR(200) CHARACTER SET ASCII,
    ALTERNATENAMES     VARCHAR(8000) CHARACTER SET UTF8,
    LATITUDE           DECIMAL(15,5),
    LONGITUDE          DECIMAL(15,5),
    FEATURE_CLASS      CHAR(1) CHARACTER SET ASCII,
    FEATURE_CODE       VARCHAR(10) CHARACTER SET ASCII,
    COUNTRY_CODE       CHAR(2) CHARACTER SET ASCII,
    CC2                VARCHAR(200) CHARACTER SET ASCII,
    ADMIN1_CODE        VARCHAR(20) CHARACTER SET ASCII,
    ADMIN2_CODE        VARCHAR(80) CHARACTER SET ASCII,
    ADMIN3_CODE        VARCHAR(20) CHARACTER SET ASCII,
    ADMIN4_CODE        VARCHAR(20) CHARACTER SET ASCII,
    POPULATION         BIGINT,
    ELEVATION          INTEGER,
    DEM                INTEGER,
    TIMEZONE           VARCHAR(40) CHARACTER SET ASCII,
    MODIFICATION_DATE  DATE
);




/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE GEONAME ADD CONSTRAINT PK_GEONAME PRIMARY KEY (GEONAMEID);


/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN GEONAME.NAME IS 
'name of geographical point';

COMMENT ON COLUMN GEONAME.ASCIINAME IS 
'name of geographical point in plain ascii characters';

COMMENT ON COLUMN GEONAME.ALTERNATENAMES IS 
'alternatenames, comma separated, ascii names automatically transliterated, convenience attribute from alternatename table';

COMMENT ON COLUMN GEONAME.LATITUDE IS 
'latitude in decimal degrees (wgs84)';

COMMENT ON COLUMN GEONAME.LONGITUDE IS 
'longitude in decimal degrees (wgs84)';

COMMENT ON COLUMN GEONAME.FEATURE_CLASS IS 
'see http://www.geonames.org/export/codes.html';

COMMENT ON COLUMN GEONAME.FEATURE_CODE IS 
'see http://www.geonames.org/export/codes.html';

COMMENT ON COLUMN GEONAME.COUNTRY_CODE IS 
'ISO-3166 2-letter country code';

COMMENT ON COLUMN GEONAME.CC2 IS 
'alternate country codes, comma separated, ISO-3166 2-letter country code';

COMMENT ON COLUMN GEONAME.ADMIN1_CODE IS 
'fipscode (subject to change to iso code), see exceptions below, see file admin1Codes.txt for display names of this code';

COMMENT ON COLUMN GEONAME.ADMIN2_CODE IS 
'code for the second administrative division, a county in the US, see file admin2Codes.txt';

COMMENT ON COLUMN GEONAME.ADMIN3_CODE IS 
'code for third level administrative division';

COMMENT ON COLUMN GEONAME.ADMIN4_CODE IS 
'code for fourth level administrative division';

COMMENT ON COLUMN GEONAME.ELEVATION IS 
'in meters';

COMMENT ON COLUMN GEONAME.DEM IS 
'digital elevation model, srtm3 or gtopo30, average elevation of 3''''x3'''' (ca 90mx90m) or 30''''x30'''' (ca 900mx900m) area in meters, integer. srtm processed by cgiar/ciat';

COMMENT ON COLUMN GEONAME.TIMEZONE IS 
'the timezone id (see file timeZone.txt)';

COMMENT ON COLUMN GEONAME.MODIFICATION_DATE IS 
'date of last modification in yyyy-MM-dd format';



/******************************************************************************/
/****                              Privileges                              ****/
/******************************************************************************/



Скрипт который генерирует для импорта IB Expert и приводит к зависанию выглядит так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
execute ibeblock
as
begin
  cbb = 'execute ibeblock (RecCount variant)
         as
         begin
           if (ibec_Mod(RecCount, 100) = 0) then
             ibec_Progress(RecCount || '' records imported.'');
         end;';
  
  DB = ibec_CreateConnection(__ctFirebird, 'DBName="127.0.0.1/3052:D:\MTG\MTG_DB\GEO.FDB";
                                            ClientLib=C:\Program Files (x86)\Firebird-2.5.2.26540-0_Win32\bin\fbclient.dll;
                                            User=SYSDBA; Password=******; Names=UTF8; SqlDialect=3;');
  try
    ibec_UseConnection(DB);
    Res = ibec_ImportData(DB, 'GEONAME', __impText, '', '', 
                          'RowFirst=1; RowLast=2147483647;
                           DateOrder=YMD; DateSeparator="-"; TimeSeparator=":"; DecimalSeparator=".";
                           CSVDelimiter=TAB; StringQualifier=NONE; RecordSeparator=CRLF;', '', cbb);
  
    if (Res is not null) then
      ibec_ShowMessage(Res || ' records were imported successfully.');
  finally
    ibec_CloseConnection(DB);
  end;

end



скрипт который работает

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
execute ibeblock
as
begin
  cbb = 'execute ibeblock (RecCount variant)
         as
         begin
           if (ibec_Mod(RecCount, 100) = 0) then
             ibec_Progress(RecCount || '' records imported.'');
         end;';
  
  DB = ibec_CreateConnection(__ctFirebird, 'DBName="127.0.0.1/3052:D:\MTG\MTG_DB\GEO.FDB";
                                            ClientLib=C:\Program Files (x86)\Firebird-2.5.2.26540-0_Win32\bin\fbclient.dll;
                                            User=SYSDBA; Password=******; Names=UTF8; SqlDialect=3;');
  try
    ibec_UseConnection(DB);
    Res = ibec_ImportData(DB, 'GEONAME', __impText, 'C:\_Lands\AZ\AZ.txt', '', 
                          'RowFirst=1; RowLast=2147483647;
                           DateOrder=YMD; DateSeparator="-"; TimeSeparator=":"; DecimalSeparator=".";
                           CSVDelimiter=TAB; StringQualifier=NONE; RecordSeparator=LF;', '', cbb);
  
    if (Res is not null) then
      ibec_ShowMessage(Res || ' records were imported successfully.');
  finally
    ibec_CloseConnection(DB);
  end;

end
...
Рейтинг: 0 / 0
Import form UTF8 txt
    #39078823
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм. А у меня не зависло на превью...
Если разделитель неправильный выставить, то он же, по идее, будет весь текст как одну строку пытаться интерпретировать.
Завтра посмотрю на скрипте.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Import form UTF8 txt
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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