Изменить способ чтения и записи текстового файла в файл CSV в PL / SQL? - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь преобразовать файл .txt в файл .csv. Я считаю, что мне удалось решить мой вопрос: когда дело доходит до файла .csv, есть ли способ изменить форматирование? текстовый файл ниже:

Price, cheap, good value, reasonable price, great for the price, very cheap, not pricey, affordable
Cleanliness, clean place, clean, very clean, good hygiene, good cleanliness, clean surroundings
Location, great location, nice location, great view, nice view, safe, very safe location

Есть 3 строки, каждая из которых начинается с заголовка категории (Цена, Чистота, Расположение). после этого «начальные слова». Можно ли изменить названия категорий в число и иметь все «начальные слова» в одном столбце?

Приведенный ниже код - это то, что я использовал для чтения txt-файла в csv-файл.

create directory FILE_READ_WRITE as 'C:\Users\Nathan\Desktop\SQL HOME WORK';

DECLARE 
 fh UTL_FILE.FILE_TYPE; 
 GetLinePrice Varchar2(255);
 GetLineClean Varchar2(255);
 GetLineLoc Varchar2(255);
 BEGIN fh := UTL_FILE.FOPEN('FILE_READ_WRITE', 'seed.txt', 'r'); 
 IF UTL_FILE.IS_OPEN(fh) THEN  DBMS_OUTPUT.PUT_LINE('File read open'); 
 ELSE  DBMS_OUTPUT.PUT_LINE('File read not open'); 
 END IF; 
 UTL_FILE.GET_LINE(fh,GetLinePrice); 
  UTL_FILE.GET_LINE(fh,GetLineClean); 
   UTL_FILE.GET_LINE(fh,GetLineLoc); 
 DBMS_OUTPUT.PUT_LINE('Value read: '||GetLinePrice);
 DBMS_OUTPUT.PUT_LINE('Value read: '||GetLineClean);
 DBMS_OUTPUT.PUT_LINE('Value read: '||GetLineLoc);
 UTL_FILE.FCLOSE(fh);
BEGIN
fh := UTL_FILE.FOPEN('FILE_READ_WRITE', 'seed.csv', 'w');
UTL_FILE.PUT_LINE(fh,GetLinePrice); 
UTL_FILE.PUT_LINE(fh,GetLineClean); 
UTL_FILE.PUT_LINE(fh,GetLineLoc); 
UTL_FILE.FCLOSE(fh);
EXCEPTION  
WHEN 
OTHERS THEN  
DBMS_OUTPUT.PUT_LINE(SQLERRM);END;
END;

Моими результатами был CSV-файл, который имеет 3 строки и выглядит почти так же, какTXT-файл, за исключением того, что вместо слов, разделенных ",", они находятся в своем собственном поле.

1 Ответ

0 голосов
/ 10 октября 2019

Вам ничего не нужно, кроме как заменить эти commas на semi-colons с помощью

replace ( GetLinePrice , ',', ';') , replace ( GetLineClean , ',', ';') и replace ( GetLineLoc , ',', ';')

во время записи строк в файл:

DECLARE
  fh           UTL_FILE.FILE_TYPE;
  GetLinePrice Varchar2(255);
  GetLineClean Varchar2(255);
  GetLineLoc   Varchar2(255);
BEGIN
  fh := UTL_FILE.FOPEN('FILE_READ_WRITE', 'seed.txt', 'r');
  IF UTL_FILE.IS_OPEN(fh) THEN
    DBMS_OUTPUT.PUT_LINE('File read open');
  ELSE
    DBMS_OUTPUT.PUT_LINE('File read not open');
  END IF;
  UTL_FILE.GET_LINE(fh, GetLinePrice);
  UTL_FILE.GET_LINE(fh, GetLineClean);
  UTL_FILE.GET_LINE(fh, GetLineLoc);
  DBMS_OUTPUT.PUT_LINE('Value read: ' || GetLinePrice);
  DBMS_OUTPUT.PUT_LINE('Value read: ' || GetLineClean);
  DBMS_OUTPUT.PUT_LINE('Value read: ' || GetLineLoc);
  UTL_FILE.FCLOSE(fh);
  BEGIN
    fh := UTL_FILE.FOPEN('FILE_READ_WRITE', 'seed.csv', 'w');
    UTL_FILE.PUT_LINE(fh, replace(GetLinePrice,',',';'));
    UTL_FILE.PUT_LINE(fh, replace(GetLineClean,',',';'));
    UTL_FILE.PUT_LINE(fh, replace(GetLineLoc,',',';'));
    UTL_FILE.FCLOSE(fh);
  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
  END;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...