在oracle /plsql中阅读dat时,是否可以读取换行符CHR(10)或CHR(13)?

iklwldmw  于 2023-08-04  发布在  Oracle
关注(0)|答案(1)|浏览(135)

我必须检查dat文件中是否每行都正确地以CHR(10)而不是CHR(13)结束。如果在160位置没有CHR(10),或者有CHR(13)或其他字符,我需要引发错误。我已经使用了UTLFILE.GETLINE,但不幸的是它不能阅读换行符。有没有人知道这是否可以在Oracle上实现?

Set serveroutput on;
DECLARE
V1 VARCHAR2(4000); --32767
F1 UTL_FILE.FILE_TYPE;
last_char    VARCHAR2(1);
BEGIN
F1 := UTL_FILE.FOPEN('DIR_IN_IMP_ACT_VENTE','temp.txt','R');
Loop
BEGIN
UTL_FILE.GET_LINE(F1,V1);
dbms_output.put_line(V1);
dbms_output.put_line('Length'||length(V1));
-- Check if the line is not empty
    IF V1 IS NOT NULL THEN
      -- Get the last character of the line
      last_char := SUBSTR(V1, -1);

 

      -- Check if the last character is a line feed (CHR(10)) or a carriage return (CHR(13))
      IF last_char = CHR(10) THEN
        DBMS_OUTPUT.PUT_LINE('Line feed (LF) found at the end of the line');
      ELSIF last_char = CHR(13) THEN
        DBMS_OUTPUT.PUT_LINE('Carriage return (CR) found at the end of the line');
      ELSE
        DBMS_OUTPUT.PUT_LINE('No line feed or carriage return found at the end of the line');
      END IF;
    END IF;

 

EXCEPTION WHEN No_Data_Found THEN EXIT; END;
end loop;

 

IF UTL_FILE.IS_OPEN(F1) THEN
dbms_output.put_line('File is Open');
end if;

 

UTL_FILE.FCLOSE(F1);
END;
/

字符串

rqmkfv5c

rqmkfv5c1#

utl_file的文档中说get_line读取的数据直到行分隔符,但不包括行分隔符。所以get_line在这方面帮不了你。您可以使用get_raw每次获取160个字节,并检查160个字符。这意味着所有的“行”都是160字节,包括行分隔符。

相关问题