Как я могу показать это сначала? - PullRequest
0 голосов
/ 23 января 2010

Я написал простое Java-приложение, у меня проблема, пожалуйста, помогите мне;

У меня есть файл (просто пример):

1.TXT
-------
SET MRED:NAME=MRED:0,MREDID=60;
SET BCT:NAME=BCT:0,NEPE=DCS,T2=5,DK0=KOR;
CREATE LCD:NAME=LCD:0;
-------

и это мой исходный код

import java.io.IOException;
import java.io.*;
import java.util.StringTokenizer;

class test1 {

    private final int FLUSH_LIMIT = 1024 * 1024;
    private StringBuilder outputBuffer = new StringBuilder(
            FLUSH_LIMIT + 1024);
    public static void main(String[] args) throws IOException {
        test1 p=new test1();
        String fileName = "i:\\1\\1.txt";
        File file = new File(fileName);
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while ((line = br.readLine()) != null) {
            StringTokenizer st = new StringTokenizer(line, ";|,");
            while (st.hasMoreTokens()) {
                String token = st.nextToken();
                p.processToken(token);

            }
        }
        p.flushOutputBuffer();
    }

    private void processToken(String token) {
        if (token.startsWith("MREDID=")) {
            String value = getTokenValue(token,"=");
            outputBuffer.append("MREDID:").append(value).append("\n");
        } else if (token.startsWith("DK0=")) {
            String value = getTokenValue(token,"=");
            outputBuffer.append("DK0=:").append(value).append("\n");
        } else if (token.startsWith("NEPE=")) {
            String value = getTokenValue(token,"=");
            outputBuffer.append("NEPE:").append(value).append("\n");
        }
        if (outputBuffer.length() > FLUSH_LIMIT) {
            flushOutputBuffer();
        }
    }

    private String getTokenValue(String token,String find) {
        int start = token.indexOf(find) + 1;
        int end = token.length();
        String value = token.substring(start, end);
        return value;
    }

    private void flushOutputBuffer() {
        System.out.print(outputBuffer);
        outputBuffer = new StringBuilder(FLUSH_LIMIT + 1024);
    }

}

Я хочу этот вывод:

MREDID:60
DK0=:KOR
NEPE:DCS

Но это приложение покажет мне это:

MREDID:60
NEPE:DCS
DK0=:KOR

скажите, пожалуйста, как я могу справиться с этим, потому что DK0 должен быть сначала, а это всего лишь пример; мое реальное приложение имеет 14000 строк

Спасибо ...

Ответы [ 3 ]

3 голосов
/ 23 января 2010

Вместо вывода значения при его чтении, поместите его в хэш-карту. Прочитав весь файл, выведите его в нужном вам порядке, получив значения из хэш-карты.

0 голосов
/ 23 января 2010

Используйте HashTable , чтобы сохранить значения и распечатать их в нужном порядке после анализа всех токенов.

//initialize hash table
HashTable ht = new HashTable();

//instead of outputBuffer.append, put the values in to the table like
ht.put("NEPE", value);
ht.put("DK0", value); //etc

//print the values after the while loop
System.out.println("MREDID:" + ht.get("MREDID"));
System.out.println("DK0:" + ht.get("DK0"));
System.out.println("NEPE:" + ht.get("NEPE"));
0 голосов
/ 23 января 2010

Создать класс, что-то вроде

class data {
   private int mredid;
   private String nepe;
   private String dk0;

   public void setMredid(int mredid) {
      this.mredid = mredid;
   }

   public void setNepe(String nepe) {
      this.nepe = nepe;
   }

   public void setDk0(String dk0) {
      this.dk0 = dk0;
   }

   public String toString() {
      String ret = "MREDID:" + mredid + "\n";
      ret = ret + "DK0=:" + dk0 + "\n";
      ret = ret + "NEPE:" + nepe + "\n";
   }

Затем измените processToken на

private void processToken(String token) {
    Data data = new Data();
    if (token.startsWith("MREDID=")) {
        String value = getTokenValue(token,"=");
        data.setMredid(Integer.parseInt(value));
    } else if (token.startsWith("DK0=")) {
        String value = getTokenValue(token,"=");
        data.setDk0(value);
    } else if (token.startsWith("NEPE=")) {
        String value = getTokenValue(token,"=");
        data.setNepe(value);
    }
    outputBuffer.append(data.toString());
    if (outputBuffer.length() > FLUSH_LIMIT) {
        flushOutputBuffer();
    }
}
...