Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обрезка части строки после первого апострофа при текстовом inner join в adoquery / 10 сообщений из 10, страница 1 из 1
18.07.2021, 23:51
    #40084545
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
Если в поле BARNAME есть апостроф ", то часть строки за ним обрезается, если нет - то все ок.
То есть к примеру BARNAME = Бла-бла-бла "123" абл-абл-абл
Останется в итоге Бла-бла-бла
Как побороть, подскажите пжл

Код: pascal
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.
...

ADOConnection.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + dir + ';Extended Properties=''text;HDR=Yes'';';
ADOConnection.Open;

with adoquery do
  begin
    sql.clear;
    sql.text:=' SELECT DISTINCT * FROM (SELECT tb1.CODE,	tb1.BARCODE,	tb1.BARNAME,	tb1.ITEMTYPE,	tb1.ITEMWEIGHT, 
                  ' tb1.GRPNAME,  tb1.GRPCODE, tb1.BRAND,	tb1.MANUFACTUR,	tb1.PRLABEL  FROM [filename1.txt] as tb1 ' +
              ' INNER JOIN  [filename2.txt] as tb2 ON  tb1.[BARCODE] = tb2.[BARCODE]) ';

    active:=false;
    active:=true;

    if recordcount<>0 then
      begin       
        assignfile(f, dir+'filename3.txt');
        rewrite(f);
        writeln(f, 'CODE', chr(9), 'BARCODE', chr(9), 'BARNAME', chr(9), 'ITEMTYPE', chr(9),
               'ITEMWEIGHT', chr(9), 'GRPNAME', chr(9), 'GRPCODE', chr(9), 'BRAND', chr(9),
               'MANUFACTUR', chr(9), 'PRLABEL');
        while not eof do
        begin
          s1:=Fields[0].AsString;
          s2:=Fields[1].AsString;
          s3:=Fields[2].AsString;
          ...



schema.ini

автор[filename1.txt]
Format=TabDelimited
ColNameHeader=True

[filename2.txt]
Format=TabDelimited
ColNameHeader=True
...
Рейтинг: 0 / 0
19.07.2021, 00:17
    #40084546
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
Потребовать у источника данных чтобы он формировал корректный CSV, а не эту хрень.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.07.2021, 02:20
    #40084550
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
арт2010

if recordcount<>0 then

Неужели в третьем десятилетии 21-го века кто-то ещё пытается использовать recordcount?
...
Рейтинг: 0 / 0
19.07.2021, 02:37
    #40084551
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
northener,

Вот как раз времена когда recordcount не работал остались в прошлом тысячелетии.

Вместе с бде и адо.
...
Рейтинг: 0 / 0
19.07.2021, 03:04
    #40084552
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
rgreat
northener,
Вот как раз времена когда recordcount не работал остались в прошлом тысячелетии.
Вместе с бде и адо.

Неужели такое наконец-то произошло!
Если честно, то не могу поверить!
Но у ТС именно ADO!
...
Рейтинг: 0 / 0
19.07.2021, 09:33
    #40084574
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
Dimitry Sibiryakov, формат выгрузки в исходные файлы вряд ли переделать - это устоявшиеся отчеты. Разве что если больше ничего не поможет. Неужели нельзя решить какими либо доп. опциями в строке подключения или схеме? Очевидно же что нужно просто устранить неверную обработку строк с русским апострофом "
...
Рейтинг: 0 / 0
19.07.2021, 10:42
    #40084593
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
арт2010
Если в поле BARNAME есть апостроф ", то часть строки за ним обрезается, если нет - то все ок.
То есть к примеру BARNAME = Бла-бла-бла "123" абл-абл-абл
Останется в итоге Бла-бла-бла
Как побороть, подскажите пжл


Заэкранировать двойные кавычки (заменить " на \") в выдаваемом запросом результате и потом при обработке строк в нужном месте разэкранировать?
...
Рейтинг: 0 / 0
19.07.2021, 11:17
    #40084598
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
Я так и не понял, что и где "обрезается" ?
1. Запрос возвращает обрезанные строки ?
2. WriteLn обрезает строку при записи ?
3. AsString - обрезает строку до апострофа ?
...
Рейтинг: 0 / 0
19.07.2021, 12:23
    #40084615
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
AnsiQuotedStr()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.07.2021, 12:44
    #40084623
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезка части строки после первого апострофа при текстовом inner join в adoquery
арт2010Неужели нельзя решить какими либо доп. опциями в строке подключения или схеме?

Нельзя. ODBC драйвер для текста требует валидный CSV, у тебя он невалидный. Это тупик.
Придётся парсить свой "устоявшийся формат" самостоятельно, поскольку ODBC такого не умеет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обрезка части строки после первого апострофа при текстовом inner join в adoquery / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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