Как добавить слово в строку в файле, не переходя на следующую строку -? - PullRequest
0 голосов
/ 24 апреля 2019

Я использую UTL_FILE для извлечения выходных данных из файла .csv и пытаюсь добавить пол к уже существующим данным файла. Но в любом случае я не мог получить ожидаемый результат. Нужна быстрая помощь по этому вопросу.

Фактический файл (Details.csv):

Name,Country,State,City
Lina,Brazil,Bahia,Salvador
John,USA,Texas,Austin
Ashton,Australia,Tasmania,Hobart

Мой вывод:

Name,Country,State,City
,Gender
Lina,Brazil,Bahia,Salvador
,Female
John,USA,Texas,Austin
,Male
Ashton,Australia,Tasmania,Hobart
,Male

Ожидаемый результат (Details_upd.csv):

Name,Country,State,City,Gender
Lina,Brazil,Bahia,Salvador,Female
John,USA,Texas,Austin,Male
Ashton,Australia,Tasmania,Hobart,Male

------ Код --------

DECLARE

   f_line      VARCHAR2 (32767);

   file_1      UTL_FILE.file_type;
   file_2      UTL_FILE.file_type;

   f_dir       VARCHAR2 (25)  := 'DATA';

   L_check_UPDATED BOOLEAN;
   l_line VARCHAR2(32767);

BEGIN

   file_1 := UTL_FILE.fopen (f_dir,'Details.csv','R');

   file_2 := UTL_FILE.fopen (f_dir,'Details_upd.csv', 'W');

      UTL_FILE.get_line (file_1, f_line);

      l_line := trim(f_line);            

      UTL_FILE.PUT_LINE(file_2,l_line||','||'Gender');

   LOOP

      L_check_UPDATED := TRUE;

      /*--omitting the LOGIC part of code--*/   

        IF (L_check_UPDATED) THEN

        l_line := trim(f_line);

        UTL_FILE.PUT(file_2,l_line||',Male');

        ELSE

        l_line := trim(f_line);

        UTL_FILE.PUT_LINE(file_2,l_line||',Female');

        END IF;

   END LOOP;

   UTL_FILE.fclose (file_1);
   UTL_FILE.fclose (file_2);

END;

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Вам нужно будет удалить символ новой строки в конце строки, которую вы прочитали с помощью GET_LINE.Попробуйте:

l_line := rtrim (f_line, ' ' || CHR (10) || CHR (13))
0 голосов
/ 25 апреля 2019

Скорее всего, ваш оракул - Unix (символ-терминатор строки - chr (10)), а ваш файл - двоичные окна, переданные (терминатор строки chr (13) + chr (10))

И после utl_file прочитайте chr(13) осталось.Вы можете использовать функцию дампа для анализа содержимого буфера.

...