0

我的用户希望能够将纯文本电子邮件消息剪切并粘贴到 Application Express 中,并解析电子邮件的内容并将记录填充到表格中。电子邮件消息通常为 10,000 - 20,000 个字符,因此我可以将电子邮件放入 VARCHAR2 或 CLOB。

我要的是指导/伪代码/提示,以便在我填充 VARCHAR2 或 CLOB 后解析这些电子邮件。

消息具有以下格式:

Item One: content for item one

Item Two: 

multiline content for item two
more multiline content for item two

*********************************    <- these asterisks are in the text
Section Header I don't care about
*********************************

Item Three: content for item three

等等。

项目标题是预先知道的,并且是固定的和定义的顺序。

我更喜欢通过 PL/SQL 来执行此操作,因为这将在 Oracle 托管的 Apex 实例中实现,但我相信 Java 也可以在那里使用(PL/SQL 更受欢迎)。

4

1 回答 1

1

以下代码为您提供了如何使用 instr 和 substr 的示例。您还需要一种将这段代码放入循环并填充 l_header_first 和 l_header_next 的方法,这样您就可以获得所需的所有值。

declare
   l_email        varchar2(32767);
   l_first        pls_integer;
   l_next         pls_integer;
   l_text         varchar2(32767);
   l_header_first varchar2(100);
   l_header_next  varchar2(100);

begin
   l_email := 'Item One: content for item one

Item Two: 

multiline content for item two
more multiline content for item two

*********************************    <- these asterisks are in the text
Section Header I don''t care about
*********************************

Item Three: content for item three';

   l_header_first := 'Item One:';
   l_header_next  := 'Item Two:';
   l_first        := instr(l_email, l_header_first) + length(l_header_first) + 1;
   l_next         := instr(l_email, l_header_next);

   l_text := substr(l_email, l_first, l_next - l_first);
   dbms_output.put_line('Found ' || l_header_first);
   dbms_output.put_line(l_text);

   l_header_first := 'Item Two:';
   l_header_next  := 'Item Three:';
   l_first        := instr(l_email, l_header_first) + length(l_header_first) + 1;
   l_next         := instr(l_email, l_header_next);

   l_text := substr(l_email, l_first, l_next - l_first);
   dbms_output.put_line('Found ' || l_header_first);
   dbms_output.put_line(l_text);

end;
于 2012-05-02T12:02:44.150 回答