У меня есть такой файл csv:

1392249600;EUR;CHF;USD;JPY;GBP
1392163200;GBP;JPY;USD;CHF;EUR
1392076800;GBP;CHF;EUR;JPY;USD
1391990400;JPY;USD;EUR;CHF;GBP
1391904000;GBP;EUR;CHF;USD;JPY
1391731200;GBP;EUR;CHF;JPY;USD
1391644800;EUR;CHF;USD;JPY;GBP
1391558400;JPY;USD;EUR;CHF;GBP

В этом файле может быть более 15 000 строк. Я пытаюсь написать код, который мог бы делать такие вещи:

1. Берет первую строку, сохраняет ее как родительскую. Затем проходит следующие 3 дня как ребенок.

2. Подсчитывает, как часто и какая комбинация дочерних элементов с этим родителем находится внутри этого файла.

3. Он создает что-то вроде резюме для этого, чтобы я мог читать сегодняшнюю комбинацию, а сценарий показывает только наиболее частые дочерние комбинации на следующие 3 дня.

У меня нет математического мышления, поэтому у меня есть большие проблемы, которые нужно решить самому.

Что я думаю, в первую очередь, мне нужен скрипт, который генерирует все возможные комбинации этих столбцов, состоящих из EUR, CHF, USD, JPY, GBP, поэтому возможных комбинаций 5 * 4 * 3 * 2 * 1 = 120. Потому что они не могут повторяться в одном ряду.

Это будет так.

Первый родитель будет комбинацией из первой строки, например: EUR; CHF; USD; JPY; GBP.

Then 3 childs would be
  GBP;JPY;USD;CHF;EUR 
  GBP;CHF;EUR;JPY;USD
  JPY;USD;EUR;CHF;GBP

Он сохраняет эту комбинацию для родительских и дочерних элементов. Затем он снова начинается с начала файла, но перемещается на одну строку ниже (как итерация +1). тогда в следующий раз все дети будут

 GBP;CHF;EUR;JPY;USD
   JPY;USD;EUR;CHF;GBP
   GBP;EUR;CHF;USD;JPY

И снова он сохраняет эти комбинации для подсчета и делает некоторые частотные результаты. И этот цикл повторяется для всех строк в файле CSV.

Может быть, есть несколько советов, которые я должен рассмотреть, как создать программу такого типа?

Любые чаевые были бы отличными!

Большое спасибо! BB

0
Edgars 13 Фев 2014 в 22:35

1 ответ

Лучший ответ

Не могли бы вы уточнить, является ли первое значение в строке вашего файла датой / временем? 1392249600; EUR; CHF; USD; JPY; GBP

Если да, ожидаете ли вы, что всего будет 4 строки с одинаковой датой / временем?

Или вам просто нужно идти последовательно и использовать Line-1 в качестве родительского, а затем Line-2, Line-3, Line-4 в качестве дочернего и продолжать ... так что Line-5 снова становится родительским?

Чтобы проверить, эквивалентен ли код страны, вы можете использовать приведенный ниже код. Я не уверен на 100% в вашем требовании, поправьте меня, если вы думаете, что это не то, что вы ищете, и я постараюсь ответить вам по-другому:

package com.collections;

public class CountryCodeComparison {
    public static void main(String[] args) {
        //Read every row and sequentially insert value in CountryCode object.
        //For ex. your row is: 1392163200;GBP;JPY;USD;CHF;EUR
        String s1 = "1392163200;GBP;JPY;USD;CHF;EUR";
        String [] array1 = s1.split(";");
        CountryCode  cc1 = new CountryCode(array1[1], array1[2], array1[1], array1[4], array1[5]);

        //For ex. your row is: 1392076800;GBP;CHF;EUR;JPY;USD
        String s2 = "1392076800;GBP;CHF;EUR;JPY;USD";
        String [] array2 = s2.split(";");
        CountryCode  cc2 = new CountryCode(array2[1], array2[2], array2[1], array2[4], array2[5]);

        if(cc1.equals(cc2)) {
            System.out.println("Both CountryCode objects are equal.");
        } else {
            System.out.println("Both CountryCode objects are NOT equal.");
        }
    }
}

class CountryCode {
    private String countryCode1;
    private String countryCode2;
    private String countryCode3;
    private String countryCode4;
    private String countryCode5;
    public CountryCode(String countryCode1, String countryCode2,
            String countryCode3, String countryCode4, String countryCode5) {
        this.countryCode1 = countryCode1;
        this.countryCode2 = countryCode2;
        this.countryCode3 = countryCode3;
        this.countryCode4 = countryCode4;
        this.countryCode5 = countryCode5;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((countryCode1 == null) ? 0 : countryCode1.hashCode());
        result = prime * result
                + ((countryCode2 == null) ? 0 : countryCode2.hashCode());
        result = prime * result
                + ((countryCode3 == null) ? 0 : countryCode3.hashCode());
        result = prime * result
                + ((countryCode4 == null) ? 0 : countryCode4.hashCode());
        result = prime * result
                + ((countryCode5 == null) ? 0 : countryCode5.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        CountryCode other = (CountryCode) obj;
        if (countryCode1 == null) {
            if (other.countryCode1 != null)
                return false;
        } else if (!countryCode1.equals(other.countryCode1))
            return false;
        if (countryCode2 == null) {
            if (other.countryCode2 != null)
                return false;
        } else if (!countryCode2.equals(other.countryCode2))
            return false;
        if (countryCode3 == null) {
            if (other.countryCode3 != null)
                return false;
        } else if (!countryCode3.equals(other.countryCode3))
            return false;
        if (countryCode4 == null) {
            if (other.countryCode4 != null)
                return false;
        } else if (!countryCode4.equals(other.countryCode4))
            return false;
        if (countryCode5 == null) {
            if (other.countryCode5 != null)
                return false;
        } else if (!countryCode5.equals(other.countryCode5))
            return false;
        return true;
    }
}
0
Nikhil Joshi 14 Фев 2014 в 11:11
Да, это дата и время, но никогда не должно повторяться. Я не упомянул, что родительский элемент каждый раз перемещается в следующую строку. Таким образом, он проверяет всех родителей и их детей.
 – 
Edgars
14 Фев 2014 в 11:18
1
Вы пытаетесь сгруппировать это по дате? Мне очень жаль, но я не могу понять, как вы решите, кто из них является родителем и его потомками?
 – 
Nikhil Joshi
14 Фев 2014 в 11:30
Первый родитель будет комбинацией из первого ряда. Я обновлю свой вопрос
 – 
Edgars
14 Фев 2014 в 11:41