我必须检查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;
/
字符串
1条答案
按热度按时间rqmkfv5c1#
utl_file的文档中说get_line读取的数据直到行分隔符,但不包括行分隔符。所以get_line在这方面帮不了你。您可以使用get_raw每次获取160个字节,并检查160个字符。这意味着所有的“行”都是160字节,包括行分隔符。