根据起始前缀从文本文件中读取多行作为记录,然后对其进行处理

阿布拉·艾哈迈德

我有如下文本文件

6200MIGS Draft Capture              001527160719256                                                                                                                                                                                                             
622001004987654321098769    2030000000002385250000000000000000000000000719024031629498071912403119100719301201208620112629498      00QFCBA003353109297315583010   036000000190 100         000000    SHOEBRIDGE/DANIEL T MR       VI50 0818950138744  600110190 
6221QANTAS AIR                                                         AUSTRALIA       036             T                                                                                                                                                        
6223       0000000000000000000                                                                                                                                                                                                                                  
6229SHOEBRIDGE/DANIEL T MR                           0818950138744  QF  YNOGVJ                           15022602300045                                        -00000238525000000000000000000000000005                                                          
62301702281700BNE            MEL  QF  H XHLFEU           631                                000000000000000000000000000000000000                                                                                                                                
62311702282335MEL            DXB  QF  H XHLFEU             9                                000000000000000000000000000000000000                                                                                                                                
62321703011450DXB            LYS  QF  H OHLFEU          8081                                000000000000000000000000000000000000                                                                                                                                
62331703082115CDG            DXB  QF  O XOLREU1         8076 0818950138745                  000000000000000000000000000000000000                                                                                                                                
62341703091025DXB            BNE  QF  O  OLREU1         8434 0818950138745                  000000000000000000000000000000000000                                                                                                                                
622001005123456789012346    2030000000000575650000000000000000000000000719024031629499071912403117080719301201208620112629499      00QFCBA003353109297315583000   036000000190 100         000000    DETTMAN/GLEN MR              CA50 0818950138719  600110190 
6221QANTAS AIR                                                         AUSTRALIA       036             T                                                                                                                                                        
6222         0719           000                                                                                                                                                                                                                                 
6229DETTMAN/GLEN MR                                  0818950138719  QF  YYUGBM                           15022602300045                                        -00000057565000000000000000000000000002                                                          
62301703151800MEL            SYD  QF  L OLPTSCN01        458                                000000000000000000000000000000000000                                                                                                                                
62311703251830SYD            MEL  QF  M  MPTSCN01        463                                000000000000000000000000000000000000   

我想读取从 6220 开始到下一个 6220 的所有行,在我的情况下,这些行是 2-9,我将其称为记录。然后我想根据起始前缀处理记录中的每一行,例如,如果它以 6223 开头,我将提取我需要的数据。我的问题是如何将这些行作为记录读取然后单独处理。

将标记和重置会有所帮助。提前致谢。到目前为止,我拥有的代码是

    File infile = new File("C:\\Data\\Everyday work\\tmp\\CBRF.GEN4_FILE.20160719.txt");
    File outfile = new File("C:\\Data\\Everyday work\\tmp\\CBRF.GEN4_FILE.20160719.txt-DCFOUT.txt");
    FileReader reader;
    Scanner scanner;
    public void output() {

        try {

            FileWriter writer = new FileWriter(outfile);
            reader = new FileReader(infile);
            BufferedReader br = new BufferedReader(reader);
            String str;
            BufferedWriter bw = new BufferedWriter(writer);
            bw.flush();     
            while ((str = br.readLine() )!= null) {


                 scanner = new Scanner(str);

                String line = scanner.nextLine();
              if (line.startsWith("6220", 0)) {

                    recordtype = line.substring(0, 4);
                    msgrtypId = line.substring(4, 8);

                }     
          }   
   }   

在这里,我可以逐行读取我想要实现的是读取行前缀 6220 和下一行前缀 6220 之间的行作为记录。

鬼猫

解决问题通常是关于创建有用的抽象。您仍然认为您必须进行“低级别”操作:您的代码从文件中读取一行;就在那里,你开始处理它。

所以,让我们退后一步,尝试进入“更高的地步”:

首先,所有“有趣”的行都是以 6220 开头的吗?或者是这些行具有特定格式的点;这告诉你新的记录开始了?你看,这很重要;因为如果后者为真,你就不用寻找以 6220 开头的行;但是对于具有“记录从此处开始”格式的行。“记录到此结束”。

下一个问题是:其他线路应该怎么办?!他们是否应该被忽略;或者你必须做其他处理吗?

那么:内存是这里的约束吗?意思是:简单地阅读完整的文件是个好主意吗?并在进行任何处理之前将其保存在内存中?或者这是一个非常大的文件;如此之大,以至于在您的环境中,您最好不要将整个内容读入内存?

你看,你的问题缺少所有这些信息;并且严肃地说:如果您试图解决所有这些问题(或答案),事情就会变得不成比例。

但是让我给你一些代码来开始。

// before your loop starts
boolean currentlyParsingRecord = false;
boolean List<String> rawRecordLines = new ArrayList<>();

// within your loop
String line = scanner.nextLine();
if (currentlyParsingRecord) {
  if (line.startsWith("6220)) { 
    currentlyParsingRecord = false;
  }
  rawRecordLines.add(line);
} else {
  if (line.startsWith("6220)) { 
    currentlyParsingRecord = true;
    rawRecordLines.add(line);
    // and now, maybe you are calling a method like
    processRecordLines(rawRecordLines);
    // and then you clear your "buffer"
    rawRecordLines.clear();
  }
}

关键是:你必须以某种方式收集属于一起的线条。我在这里使用了一个简单的列表;然后您只需传递该列表以处理该记录的数据(当然;您不应该忘记清除该“缓冲区”;因为您可能会开始收集下一个)。请注意:当然这不是最终的解决方案;它应该只是让你知道如何从这里开始。这些事情实际上可能非常复杂。而且,你看;实际上这仍然是一个非常“低级”的实现;所以“OO设计明智”还有很大的改进空间。

希望有帮助。但正如所说:在你进一步从事编程之前;你最好澄清你的要求你应该坐下;和你周围的人交谈;真正了解如何/在该文件中处理什么。如果你不这样做;很有可能你今天实施的任何东西明天都不够好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在文本文件中读取多行,然后在另一个文本文件中写入

来自分类Dev

使用多行变量和数据记录在php中读取文本文件

来自分类Dev

逐行读取文本文件,然后使用批处理脚本将其存储在数组中

来自分类Dev

从文本文件中读取多个URL,处理每个网页,然后在其中抓取内容

来自分类Dev

如何从文本文件中删除多行记录?

来自分类Dev

如何从文本文件中删除多行记录?

来自分类Dev

从bash中的文本文件读取多行

来自分类Dev

如何从文本文件中读取查询,对其进行修改并调用它

来自分类Dev

读取多行文本文件

来自分类Dev

如何读取文件夹中的所有文本文件并根据后缀或前缀过滤显示

来自分类Dev

逐行读取压缩的文本文件以在python 3.2.6中进行处理

来自分类Dev

读取文本文件中的值并进行后续处理

来自分类Dev

从文本文件中读取时钟时间和事件时间并进行处理

来自分类Dev

从文本文件中读取数据作为列表数组

来自分类Dev

我正在尝试读取一个字符串,将其加密,然后将其保存到文本文件中,然后读取该文本文件,然后读取已加密的字符串,并在python中对其进行解密

来自分类Dev

在Java中读取文本文件时进行跟踪

来自分类Dev

读取文本文件,在特定位置进行修改,然后另存为python中的新文件

来自分类Dev

用读取文本文件的for循环替换多行批处理文件

来自分类Dev

根据起始行值检查文本文件中的特定行字数

来自分类Dev

PySpark:使用newAPIHadoopFile从多行记录文本文件读取,映射和缩小

来自分类Dev

根据日期名称读取多个文本文件,然后全部写入以连接字符串

来自分类Dev

根据日期名称读取多个文本文件,然后全部写入以连接字符串

来自分类Dev

根据前缀连接文本文件?

来自分类Dev

在文本文件中搜索多行字符串,然后在Python中返回行号

来自分类Dev

在C ++中的文本文件中先读取数字,然后读取字母

来自分类Dev

如何使用php或bash读取文本文件并对其进行排序?

来自分类Dev

如何使用php或bash读取文本文件并对其进行排序?

来自分类Dev

如何从文本文件中读取值,然后在xml文件中查找并替换值?

来自分类Dev

如何在我的项目中添加文本文件,然后在代码中读取文本行?

Related 相关文章

  1. 1

    在文本文件中读取多行,然后在另一个文本文件中写入

  2. 2

    使用多行变量和数据记录在php中读取文本文件

  3. 3

    逐行读取文本文件,然后使用批处理脚本将其存储在数组中

  4. 4

    从文本文件中读取多个URL,处理每个网页,然后在其中抓取内容

  5. 5

    如何从文本文件中删除多行记录?

  6. 6

    如何从文本文件中删除多行记录?

  7. 7

    从bash中的文本文件读取多行

  8. 8

    如何从文本文件中读取查询,对其进行修改并调用它

  9. 9

    读取多行文本文件

  10. 10

    如何读取文件夹中的所有文本文件并根据后缀或前缀过滤显示

  11. 11

    逐行读取压缩的文本文件以在python 3.2.6中进行处理

  12. 12

    读取文本文件中的值并进行后续处理

  13. 13

    从文本文件中读取时钟时间和事件时间并进行处理

  14. 14

    从文本文件中读取数据作为列表数组

  15. 15

    我正在尝试读取一个字符串,将其加密,然后将其保存到文本文件中,然后读取该文本文件,然后读取已加密的字符串,并在python中对其进行解密

  16. 16

    在Java中读取文本文件时进行跟踪

  17. 17

    读取文本文件,在特定位置进行修改,然后另存为python中的新文件

  18. 18

    用读取文本文件的for循环替换多行批处理文件

  19. 19

    根据起始行值检查文本文件中的特定行字数

  20. 20

    PySpark:使用newAPIHadoopFile从多行记录文本文件读取,映射和缩小

  21. 21

    根据日期名称读取多个文本文件,然后全部写入以连接字符串

  22. 22

    根据日期名称读取多个文本文件,然后全部写入以连接字符串

  23. 23

    根据前缀连接文本文件?

  24. 24

    在文本文件中搜索多行字符串,然后在Python中返回行号

  25. 25

    在C ++中的文本文件中先读取数字,然后读取字母

  26. 26

    如何使用php或bash读取文本文件并对其进行排序?

  27. 27

    如何使用php或bash读取文本文件并对其进行排序?

  28. 28

    如何从文本文件中读取值,然后在xml文件中查找并替换值?

  29. 29

    如何在我的项目中添加文本文件,然后在代码中读取文本行?

热门标签

归档