解析和操作格式奇怪的数据,同时保持格式

  • 本文关键字:格式 数据 操作 java parsing
  • 更新时间 :
  • 英文 :


我是一个相当新手程序员,基本上我试图解析和操作一个DL_POLY配置文件,它有布局

 CONFIG file created from Xmol file config.xmol                                 
         2         3  10000000    0.5000000000E-03
     31.309729731729      0.000000000000      0.000000000000
      0.000000000000     31.309729731729      0.000000000000
      0.000000000000      0.000000000000     31.309729731729
Ca              1
     6.421269411        -1.034199034         1.228702751    
  -1.06475894897       1.10274459622       1.31459311620    
  -6319.67959205      -10299.4183311       468.606019012    

大约有150多个

条目
Ca              1
     6.421269411        -1.034199034         1.228702751    
  -1.06475894897       1.10274459622       1.31459311620    
  -6319.67959205      -10299.4183311       468.606019012    

段,其中第二行表示x, y和z坐标,我需要通过添加稍微的位移来操作,而顶部行,Ca表示原子(在本例中是钙),整数是原子计数器(这是第一个原子,我有一个大约75 CaCO3的系统)。

现在我已经写了一些java代码,它在字符串中读取,将其粘贴在arrayList中并标记它,从那里我很确定如何添加位移,只维持这种奇怪的格式使它变得复杂。显然,我的目标是一个通用的解决方案,因为我可以得到这里,所以我可以重用这个,虽然我确信我可以强制它成正确的格式,这意味着我只能使用它的文件。

所以,我的问题是,我如何在java中操作文件中的值,保持格式100%完整?在这个系统中,我如何告诉它只在每个线段的第二行上加位移?

这有点复杂(也许不是,我真的不知道),但我真的很感激你的帮助。

那么,我得到了这样的东西:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import java.util.ArrayList;
import java.io.FileReader;
public class testArrayReader {
static ArrayList<String> temp = new ArrayList<String>();

public static void main(String[] args) {
    String[] arr = null;
    String[][] twodim = null;
    System.out.println("Array List initialised!");
        try{
            FileReader input = new FileReader(urlfortextfile);
            BufferedReader reader = new BufferedReader(input);
            System.out.println("Scanned!");
            String line;
            int onedimcounter = 0;
            while((line = reader.readLine()) != null){
                temp.add(onedimcounter++, line);
        }
            System.out.println(temp);
            twodim = temp.toArray(new String[temp.size()][temp.get(0).length()]);
            System.out.println("stage 2 complete");
            System.out.println(twodim);
    }
        catch(FileNotFoundException ex){
            System.out.println("No file found boss.");
    }
        catch(IOException ex){
            System.out.println("IO error.");
        }
  }
}

几个查询,

1)[第一行,第二行,…][第n行]-逗号表示第一行和第二行是独立的元素,对吗?

2)我得到一个ArrayStoreException,我真的不是100%确定为什么-文档提到了一些关于转换错误,所以我假设我的数组列表项目仍然卡住为对象。我该如何解决这个问题?

3)当前的修改计划是在最终数组中列出元素索引,修改并重印,但我已逐行分块以保持格式。需要一点确认,我在正确的轨道上,我的想法是解析双精度,做我需要做的,然后试着让计算机计算数字之间的空白的数量,然后替换建立一个字符串,然后我可以重新插入。类似于一个带有if语句的计数器,它基于一些布尔值来查找空白,然后当我连接最后的字符串时,计数器将插入" "。

欢呼。

首先,将文件解析为具有相关文件位置元数据的值表。

第二个实现所有的原子复制/插入/删除的单元格/行/列,同时更新文件中的位置。

第三,实现一个表序列化操作符,它接受旧内容,以便您可以查找数据行之间和行内单元格之间的空白,这样您就可以在序列化更改的数值时从旧文件推断出数字格式(sig位数)。


如何查找和解析文件元数据中的位置?

要关联职位信息,请跟踪

/** Number of line breaks since start of file */
int lineNumber;  
/** Number of chars since start of file */
int charInFile;
/** Number of chars since start of line (if on the zero-th line) or last line break. */
int charInLine;  

然后对每个标记,将标记中第一个字符之前的位置和最后一个字符之后的位置相关联。

当您解析表、表行或表单元这样的复杂结构时,存储它所跨的第一个令牌之前的位置以及它所跨的最后一个令牌之后的位置。


什么是表序列化操作符?我知道序列化只是不知道

通过运算符,我只是指编程语言的一部分,它允许您指定输入和输出之间的关系。我使用它是为了避免特定于语言的术语,如函数方法过程


如何在堆栈溢出

中输入返回键

参见"绝密的两个空格换行符下降的奇怪原因是什么?"

最新更新