0

我有这样的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

4

1 回答 1

0

您能否澄清一下文件中连续的第一个值是否是日期/时间?1392249600;欧元;瑞士法郎;美元;日元;英镑

如果是,您是否期望共有 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;
    }
}
于 2014-02-14T07:11:45.303 回答