How can i count this variables in my DB?

count, java, loops

Solution

Please see my solution below. The test file test1.txt you gave seems to have some special chars at beginning of file.

.

Solution

public class Test {

    public static void main(String[] args) throws IOException {
        Test test = new Test();
        test.execute();
    }

    private static String TYPE_XTSM = "XTSM";
    private static String TYPE_XTS = "XTS";
    private static String TYPE_XRX = "XRX";
    private static String TYPE_XHAN = "XHAN";

    private void execute() throws IOException {
        InputStream in = null;
        BufferedReader br = null;
        TreeMap<Integer, TreeMap<Integer, Integer>> xtsmMap = new TreeMap<Integer, TreeMap<Integer, Integer>>();
        try {
            in = Test.class.getResourceAsStream("test1.txt");
            br = new BufferedReader(new InputStreamReader(in));
            String line;
            while ((line = br.readLine()) != null) {
                Record rec = new Record(line);
                processRecord(xtsmMap, rec);
            }
        } finally {
            if (br != null) {
                br.close();
            }
        }
        printResults(xtsmMap);
    }

    private void processRecord(
            TreeMap<Integer, TreeMap<Integer, Integer>> xtsmMap, Record rec) {
        TreeMap<Integer, Integer> xtsMap;
        if (xtsmMap.containsKey(rec.getXtsm())) {
            xtsMap = xtsmMap.get(rec.getXtsm());
        } else {
            xtsMap = new TreeMap<Integer, Integer>();
            xtsmMap.put(Integer.valueOf(rec.getXtsm()), xtsMap);
        }
        if (xtsMap.containsKey(rec.getXts())) {
            Integer count = xtsMap.get(rec.getXts());
            xtsMap.put(Integer.valueOf(rec.getXts()), Integer.valueOf(count
                    .intValue() + 1));
        } else {
            xtsMap.put(Integer.valueOf(rec.getXts()), Integer.valueOf(1));
        }
    }

    private void printResults(
            TreeMap<Integer, TreeMap<Integer, Integer>> xtsmMap) {
        System.out.println("Type\t\tTotal");
        Set<Integer> xtsmSet = xtsmMap.navigableKeySet();
        for (Integer xtsm : xtsmSet) {
            TreeMap<Integer, Integer> xtsMap = xtsmMap.get(xtsm);
            Set<Integer> xtsSet = xtsMap.navigableKeySet();
            for (Integer xts : xtsSet) {
                Integer count = xtsMap.get(xts);
                String outputLine = TYPE_XTSM + ":" + xtsm + "/" + TYPE_XTS
                        + ":" + xts + "\t" + count;
                System.out.println(outputLine);
            }
        }
    }

    private static class Record {

        private Integer xtsm, xts, xrk, xhan;

        Record(String line) {
            StringTokenizer st = new StringTokenizer(line, "/");
            while (st.hasMoreTokens()) {
                String token = st.nextToken();
                String type = token.substring(0, token.indexOf(":"));
                String valueStr = token.substring(token.indexOf(":") + 1, token
                        .length());
                Integer value = Integer.valueOf(valueStr);
                if (TYPE_XTSM.equals(type)) {
                    xtsm = value;
                } else if (TYPE_XTS.equals(type)) {
                    xts = value;
                } else if (TYPE_XRX.equals(type)) {
                    xrk = value;
                } else if (TYPE_XHAN.equals(type)) {
                    xhan = value;
                }
            }
        }

        public Integer getXtsm() {
            return xtsm;
        }

        public Integer getXts() {
            return xts;
        }

        public Integer getXrk() {
            return xrk;
        }

        public Integer getXhan() {
            return xhan;
        }
    }
}

.

Output

Type        Total
XTSM:0/XTS:0    29
XTSM:0/XTS:1    29
XTSM:0/XTS:2    29
XTSM:1/XTS:0    29
XTSM:1/XTS:1    29
XTSM:1/XTS:2    29
XTSM:2/XTS:0    29
XTSM:2/XTS:1    29
XTSM:2/XTS:2    29
XTSM:3/XTS:0    14
XTSM:3/XTS:1    14
XTSM:3/XTS:2    14
XTSM:4/XTS:0    13
XTSM:4/XTS:1    13
XTSM:4/XTS:2    13
XTSM:5/XTS:0    14
XTSM:5/XTS:1    14
XTSM:5/XTS:2    14
XTSM:6/XTS:0    21
XTSM:6/XTS:1    21
XTSM:6/XTS:2    21
XTSM:7/XTS:0    29
XTSM:7/XTS:1    29
XTSM:7/XTS:2    29
XTSM:8/XTS:0    14
XTSM:8/XTS:1    21
XTSM:9/XTS:0    21
XTSM:9/XTS:1    21
XTSM:9/XTS:2    21
XTSM:10/XTS:0   14
XTSM:10/XTS:1   14
XTSM:10/XTS:2   14
XTSM:11/XTS:0   14
XTSM:11/XTS:1   14
XTSM:11/XTS:2   14
XTSM:12/XTS:0   14
XTSM:12/XTS:1   14
XTSM:12/XTS:2   14
XTSM:13/XTS:0   29
XTSM:13/XTS:1   29
XTSM:13/XTS:2   29
XTSM:14/XTS:0   29
XTSM:14/XTS:1   29
XTSM:15/XTS:0   29
XTSM:15/XTS:1   29
XTSM:15/XTS:2   29
XTSM:16/XTS:0   29
XTSM:16/XTS:1   29
XTSM:16/XTS:2   29
XTSM:17/XTS:0   29
XTSM:17/XTS:1   29
XTSM:17/XTS:2   29
XTSM:18/XTS:0   29
XTSM:18/XTS:1   29
XTSM:18/XTS:2   29
XTSM:19/XTS:0   29
XTSM:19/XTS:1   29
XTSM:19/XTS:2   29
XTSM:21/XTS:0   29
XTSM:21/XTS:1   29
XTSM:21/XTS:2   29
XTSM:22/XTS:0   29
XTSM:22/XTS:1   29
XTSM:22/XTS:2   29
XTSM:23/XTS:0   29
XTSM:23/XTS:1   29
XTSM:23/XTS:2   29
XTSM:24/XTS:0   29
XTSM:24/XTS:1   29
XTSM:24/XTS:2   29
XTSM:25/XTS:0   29
XTSM:25/XTS:1   29
XTSM:25/XTS:2   29
XTSM:26/XTS:0   14
XTSM:26/XTS:1   14
XTSM:26/XTS:2   14
XTSM:28/XTS:0   15
XTSM:28/XTS:1   15
XTSM:28/XTS:2   15
XTSM:29/XTS:0   13
XTSM:29/XTS:1   13
XTSM:29/XTS:2   13
XTSM:30/XTS:0   14
XTSM:30/XTS:1   14
XTSM:31/XTS:0   14
XTSM:31/XTS:1   13
XTSM:31/XTS:2   13
XTSM:32/XTS:0   13
XTSM:32/XTS:1   14
XTSM:32/XTS:2   13
XTSM:33/XTS:0   14
XTSM:33/XTS:1   14
XTSM:33/XTS:2   14
XTSM:34/XTS:0   14
XTSM:34/XTS:1   14
XTSM:34/XTS:2   14
XTSM:35/XTS:0   29
XTSM:35/XTS:1   29
XTSM:35/XTS:2   29
XTSM:36/XTS:0   29
XTSM:36/XTS:1   21
XTSM:36/XTS:2   21
XTSM:37/XTS:0   14
XTSM:37/XTS:1   14
XTSM:37/XTS:2   14
XTSM:38/XTS:0   14
XTSM:38/XTS:1   14
XTSM:38/XTS:2   14
XTSM:39/XTS:0   21
XTSM:39/XTS:1   21
XTSM:39/XTS:2   21
XTSM:40/XTS:0   29
XTSM:40/XTS:1   29
XTSM:40/XTS:2   7
XTSM:41/XTS:0   29
XTSM:41/XTS:1   29
XTSM:41/XTS:2   29

Problem

Colud you please help me about this problem ? I have 4 variables - XTSM is between 0~200 - XTS is between 0~2 - XRX is 0~3 - XHAN is 0~7 - ZHTYPE is one of these : (1)TCHF_HLF (2)TCHSD (3)TCHFULL they are related to their with this shape . `XTSM->XTS->XRX->XHAN->ZHTYPE` (Just Logical) this means : - Each XTSM has 3 XTS (0-2) - Each XTS has 4 XRX (0-3) - Each XRX has 8 XCHAN (0-7) - and Each line has a type of ZHTYPE I have a DB file with 14000 lines; in this file these variables specified, For example XTSM is between 0~200 but usually it's less than 200 and maybe for example specified 0~60 but it's never greater than 200; and it's true for XTS,XRX and XCHAN of course ... so we must make all variables as a dynamic ; this is a part of file (for example UPDATED) : http://www.4shared.com/file/210566155/c080d93a/db_online.html I want get this output ? (I want to show XTSM and XTS to output and in the backgroud must calculate all of them) please help me ``` ----Type------------------Total---------------------Total of ZHTYPE----------------- XTSM:0/XTS:0 in this case is : 29 TCHF_HLF:28 TCHSD:1 TCHFULL:0 XTSM:0/XTS:1 No. of found XTSM:0/XTS:2 No. of found XTSM:1/XTS:0 No. of found XTSM:1/XTS:1 No. of found XTSM:1/XTS:2 No. of found ``` I don't know but i think it's maybe this ; No ? It's just pseudo code : ``` for(i ; i< (Total of XTSM) ; i++){ for(j ; j< (Total of XTS) ; j++){ for(k ; k< (Total of XRX) ; k++){ for(l ; l< (Total of XCHAN) ; l++) Print( Total of XTSM:x/XTS:y); } } } ``` Thanks for your help ...

Original source