簡體   English   中英

解析和處理奇數格式的數據,同時保持格式

[英]Parsing and manipulating oddly formatted data, whilst maintaining formatting

我是一個非常新手的程序員,基本上我正在嘗試解析和操作具有布局的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%地確定為什么-文檔提到了有關轉換錯誤的內容,所以我假設我的arraylist項仍然被卡為對象。 我該如何解決?

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;  

然后,將每個令牌與令牌中第一個字符之前的位置和最后一個字符之后的位置相關聯。

當您解析復雜的結構(如表,表行或表單元格)時,將其所存儲的第一個標記之前的位置和它所存儲的最后一個標記之后的位置與其一起存儲。


什么是表序列化運算符? 我知道序列化不是

通過運算符 ,我只是指一種編程語言的一部分,它允許您指定輸入和輸出之間的關系。 我用它來避免使用特定於語言的術語,例如functionmethodprocedure


如何在堆棧溢出中輸入返回鍵

請參閱“ 最高機密的兩個空間換行符降價怪異是什么原因?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM