edi 分割<CR> or <CR><LF>
时间: 2023-10-23 11:08:51 浏览: 69
在 EDI 文件中,一行的结束通常使用回车(CR)和换行(LF)两个字符组合来表示,即<CR><LF>。这被称为 CRLF 行结束符。
但是,在某些EDI文件中,也可能使用单独的回车符(CR)作为行结束符,这被称为 CR 行结束符。
因此,在进行 EDI 文件处理时,需要根据实际情况来判断行结束符的类型,以便正确地解析和处理 EDI 文件。
相关问题
# int8 -- 双出错故障。 类型:放弃;有错误码。 # 通常当 CPU 在调用前一个异常的处理程序而又检测到一个新的异常时,这两个异常会被串行地进行 # 处理,但也会碰到很少的情况,CPU 不能进行这样的串行处理操作,此时就会引发该中断。 98 _double_fault: 99 pushl $_do_double_fault # C 函数地址入栈。 100 error_code: 101 xchgl %eax,4(%esp) # error code <-> %eax,eax 原来的值被保存在堆栈上。 102 xchgl %ebx,(%esp) # &function <-> %ebx,ebx 原来的值被保存在堆栈上。 103 pushl %ecx 104 pushl %edx 105 pushl %edi 106 pushl %esi 107 pushl %ebp 108 push %ds 109 push %es 110 push %fs 111 pushl %eax # error code # 出错号入栈。 112 lea 44(%esp),%eax # offset # 程序返回地址处堆栈指针位置值入栈。 113 pushl %eax 114 movl $0x10,%eax # 置内核数据段选择符。 115 mov %ax,%ds 116 mov %ax,%es 117 mov %ax,%fs 118 call *%ebx # 间接调用,调用相应的 C 函数,其参数已入栈。 addl $8,%esp # 丢弃入栈的 2 个用作 C 函数的参数。 120 pop %fs 121 pop %es 122 pop %ds 123 popl %ebp 124 popl %esi 125 popl %edi 126 popl %edx 127 popl %ecx 128 popl %ebx 129 popl %eax 130 iret 131 解释下这段话
这段话描述了一个汇编代码的执行过程,具体内容如下:
98: `_double_fault`: 这是一个标签,用于标识一个代码块或函数的入口点,这里表示双出错故障的处理。
99: `pushl $_do_double_fault`: 将 `_do_double_fault` C 函数的地址压入堆栈,准备调用该函数处理双出错故障。
100: `error_code:`: 这是一个标签,用于标识错误码处理的代码块。
101: `xchgl %eax,4(%esp)`: 交换 `%eax` 寄存器和堆栈上偏移为 4 的位置的值,将 `%eax` 中的值保存在堆栈上。
102: `xchgl %ebx,(%esp)`: 交换 `%ebx` 寄存器和堆栈顶部位置的值,将 `%ebx` 中的值保存在堆栈上。
103-107: 将 `%ecx`、`%edx`、`%edi`、`%esi`、`%ebp` 寄存器的值依次压入堆栈。
108-109: 将 `%ds` 和 `%es` 寄存器的值压入堆栈。
110: `pushl %eax`: 将 `%eax` 寄存器中的值压入堆栈,即错误码入栈。
111: `lea 44(%esp),%eax`: 计算堆栈指针位置偏移为 44 的地址并存储到 `%eax` 寄存器中。
113: `pushl %eax`: 将 `%eax` 寄存器中的值压入堆栈,即程序返回地址处堆栈指针位置值入栈。
114-117: 将立即数 `0x10`(内核数据段选择符)移动到 `%ds`、`%es` 和 `%fs` 寄存器中。
118: `call *%ebx`: 通过 `%ebx` 中保存的地址,间接调用相应的 C 函数进行处理,该函数的参数已经入栈。
119: `addl $8,%esp`: 丢弃入栈的两个用作 C 函数的参数,通过增加堆栈指针来实现。
120-122: 弹出 `%fs`、`%es` 和 `%ds` 寄存器中保存的值。
123-125: 依次弹出 `%ebp`、`%esi` 和 `%edi` 寄存器中保存的值。
126-127: 依次弹出 `%edx` 和 `%ecx` 寄存器中保存的值。
128-129: 依次弹出 `%ebx` 和 `%eax` 寄存器中保存的值。
130: `iret`: 执行中断返回指令,恢复现场并返回到之前的执行点。
总之,这段代码是用于处理双出错故障的一系列操作。它将相关寄存器的值保存到堆栈上,设置内核数据段选择符,并调用相应的 C 函数进行处理。最后,通过中断返回指令 `iret` 恢复现场并返回到之前的执行点。具体的功能和目的需要根据上下文来确定。
Java处理EDI解析的测试类
以下是一个简单的Java测试类,用于解析EDI文件:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.milyn.edi.unedifact.d96a.D96AInterchangeFactory;
import org.milyn.edi.unedifact.d96a.INVOic;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup11;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup12;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup13;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup14;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup15;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup16;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup17;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup18;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup19;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup1a;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup1a.INVOicSegmentGroup1a1;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup1a.INVOicSegmentGroup1a2;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup1a.INVOicSegmentGroup1a3;
import org.milyn.edi.unedifact.d96a.INVOic.INVOicSegmentGroup.INVOicSegmentGroup1.INVOicSegmentGroup1a.INVOicSegmentGroup1a4;
import org.milyn.smooks.edi.unedifact.model.r41.SegmentGroup;
import org.milyn.smooks.edi.unedifact.model.r41.SegmentGroup10;
public class EdiParserTest {
public static void main(String[] args) throws IOException {
String ediFile = "example.edi"; // EDI文件路径
BufferedReader reader = new BufferedReader(new FileReader(ediFile));
String ediContent = "";
String line;
while ((line = reader.readLine()) != null) {
ediContent += line;
}
reader.close();
D96AInterchangeFactory factory = D96AInterchangeFactory.getInstance();
INVOic invoice = factory.fromUNEdifact(ediContent, INVOic.class);
// 获取INVOIC头部信息
INVOicSegmentGroup1 invoiceHeader = invoice.getINVOicSegmentGroup1();
System.out.println("Header Information:");
System.out.println("Invoice Number: " + invoiceHeader.getE1004());
System.out.println("Invoice Date: " + invoiceHeader.getE1373());
System.out.println("Invoice Currency Code: " + invoiceHeader.getE6345());
// 获取INVOIC行项目信息
List<INVOicSegmentGroup> invoiceItems = invoice.getINVOicSegmentGroup();
System.out.println("Line Item Information:");
for (INVOicSegmentGroup item : invoiceItems) {
INVOicSegmentGroup1a itemHeader = item.getINVOicSegmentGroup1().getINVOicSegmentGroup1a();
INVOicSegmentGroup11 itemDetail = item.getINVOicSegmentGroup11();
System.out.println("Item Number: " + itemHeader.getE7140());
System.out.println("Product Code: " + itemDetail.getE7143());
System.out.println("Product Description: " + itemDetail.getE7008());
System.out.println("Invoice Quantity: " + itemDetail.getE6063());
System.out.println("Invoice Unit Price: " + itemDetail.getE6411());
System.out.println("Invoice Line Total: " + itemDetail.getE5463());
}
}
}
```
这个测试类使用了Milyn EDI库来解析EDI文件。你需要在项目中添加以下Maven依赖:
```xml
<dependency>
<groupId>org.milyn</groupId>
<artifactId>milyn-edisax-unedifact</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.milyn</groupId>
<artifactId>milyn-smooks-core</artifactId>
<version>1.7.1</version>
</dependency>
```
请注意,这个测试类仅适用于特定类型的EDI文件。如果你的EDI文件结构不同,你需要根据你自己的情况编写代码。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)