问题描述
嗨,
我正在使用UTL_FILE包中的普特过程创建一个新文件。这将在文件末尾插入一个空的新行。
你能给我建议怎么从文件中删除这最后一行吗?
我不希望最后一行空包含在我的文件中。我的文件也是一个.csv文件,大小为2-3 GB。因此,建议我采取适当的方法,在不妨碍性能的情况下删除最后一条空行。
以下是示例:
宣布
文件UTL_FILE.file_type ;
fileData VARCHAR2(2096):='这是测试行'; --文件内容
fileName VARCHAR2(50):='Test File.txt';
路径VARCHAR2(2096):='FLS03_DIR_CAR_REQ'; -- Oracle目录名
开始
文件:= utl_file.fOpen (路径,文件名,'W') ;
utl_file.put_line (文件,文件数据) ;
utl_file.put (文件,'下一行测试') ;
IF ( utl_file.is_Open(file)) then
utl_file.f Close(file) ;
结束IF ;
结束;
上面的测试过程创建一个名为“Test File.txt”的文件,并在其中写入单个文件。写完那一行后,文件中就会附加一个新行字符。我只是不想在最后多出一条新线路。
我的代码是用上面的文件写入逻辑实现的。但是,在我的代码中,行数可能会变成1000万行,这取决于业务逻辑。
因此,你能让我知道如何删除最后一个空行在文件的末尾。
请按要求查找资料。
通过使用上述代码,我得到的实际输出是:
第1行:这是测试行
线路2 :
在这里,在写完第一行(即第1行)之后,就会写出一个换行符,即第2行,尽管这一行上没有写任何东西。我不想写任何没有任何内容的多余的行。我需要以下结果:
第1行:这是测试行
在我的代码中,写入文件后,我们将把文件发送到另一个系统。在其中,通过读取文件的内容来加载文件。现在,在这个系统里,他们希望每一行都有内容。但是,在文件的末尾,他们得到的是一行,但没有内容,这将导致一个错误。
因此,请建议我任何解决方案,写一个行在一个文件,结束没有任何新的行。
我正在使用UTL_FILE包中的普特过程创建一个新文件。这将在文件末尾插入一个空的新行。
你能给我建议怎么从文件中删除这最后一行吗?
我不希望最后一行空包含在我的文件中。我的文件也是一个.csv文件,大小为2-3 GB。因此,建议我采取适当的方法,在不妨碍性能的情况下删除最后一条空行。
以下是示例:
宣布
文件UTL_FILE.file_type ;
fileData VARCHAR2(2096):='这是测试行'; --文件内容
fileName VARCHAR2(50):='Test File.txt';
路径VARCHAR2(2096):='FLS03_DIR_CAR_REQ'; -- Oracle目录名
开始
文件:= utl_file.fOpen (路径,文件名,'W') ;
utl_file.put_line (文件,文件数据) ;
utl_file.put (文件,'下一行测试') ;
IF ( utl_file.is_Open(file)) then
utl_file.f Close(file) ;
结束IF ;
结束;
上面的测试过程创建一个名为“Test File.txt”的文件,并在其中写入单个文件。写完那一行后,文件中就会附加一个新行字符。我只是不想在最后多出一条新线路。
我的代码是用上面的文件写入逻辑实现的。但是,在我的代码中,行数可能会变成1000万行,这取决于业务逻辑。
因此,你能让我知道如何删除最后一个空行在文件的末尾。
请按要求查找资料。
通过使用上述代码,我得到的实际输出是:
第1行:这是测试行
线路2 :
在这里,在写完第一行(即第1行)之后,就会写出一个换行符,即第2行,尽管这一行上没有写任何东西。我不想写任何没有任何内容的多余的行。我需要以下结果:
第1行:这是测试行
在我的代码中,写入文件后,我们将把文件发送到另一个系统。在其中,通过读取文件的内容来加载文件。现在,在这个系统里,他们希望每一行都有内容。但是,在文件的末尾,他们得到的是一行,但没有内容,这将导致一个错误。
因此,请建议我任何解决方案,写一个行在一个文件,结束没有任何新的行。
专家解答
使用标准utl_file (即文本模式) *we*控制行尾语义。因此,正如您所看到的,我们负责CR和LF
如果*你*想完全控制文件,那么你可以以原始的方式访问文件,例如
SQL> declare 2 file UTL_FILE.file_type; 3 fileData VARCHAR2(2096):='This is the test line'; -- File Content 4 fileName VARCHAR2(50):= 'TestFile.txt'; 5 path VARCHAR2(2096):='TEMP'; -- Oracale Directory Name 6 begin 7 file := utl_file.fopen(path,fileName,'W'); 8 utl_file.put_line(file, fileData); 9 utl_file.put(file,'Next Line Test'); 10 IF (utl_file.is_open(file)) THEN 11 utl_file.fclose(file); 12 END IF; 13 end; 14 / PL/SQL procedure successfully completed. C:\temp>od -c TestFile.txt 0000000 T h i s i s t h e t e s t 0000020 l i n e \r \n N e x t L i n e 0000040 T e s t \r \n 0000047
如果*你*想完全控制文件,那么你可以以原始的方式访问文件,例如
SQL> declare
2 file UTL_FILE.file_type;
3 fileData VARCHAR2(2096):='This is the test line'; -- File Content
4 fileName VARCHAR2(50):= 'TestFile.txt';
5 path VARCHAR2(2096):='TEMP'; -- Oracale Directory Name
6 crlf varchar2(2) := chr(10)||chr(13);
7 begin
8 file := utl_file.fopen(path,fileName,'wb');
9 utl_file.put_raw(file, utl_raw.cast_to_raw(fileData||utl_Tcp.crlf));
10 utl_file.put_raw(file,utl_raw.cast_to_raw('Next Line Test'));
11 IF (utl_file.is_open(file)) THEN
12 utl_file.fclose(file);
13 END IF;
14 end;
15 /
PL/SQL procedure successfully completed.
C:\temp>od -c TestFile.txt
0000000 T h i s i s t h e t e s t
0000020 l i n e \r \n N e x t L i n e
0000040 T e s t
0000045
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




