簡體   English   中英

如何使用不同的長度將索引分配給CSV中的值。 (JAVA)

[英]How to assign indexes to values in CSV using different lengths. (Java)

我正在嘗試將兩個不同CSV文件中的值對齊以喜歡索引。 一個CSV每秒有一個Unix時間戳,另一個每分鍾就有一個。 另外,我需要標記索引pn的各種長度的數據。

因此,例如,我需要用索引0標記分鍾1-20(和秒1-1200),然后將索引1標記為分鍾21-25(1260-1500),將索引標記為26-42(1560-2520) 2,等

長度會因我使用的數據(可能是保存長度的不同值的數組)而異,因此我想以編程方式進行此操作。 我不確定如何解決這個問題。 任何幫助將不勝感激。

編輯(希望這有助於弄清一些內容)

我在一種CSV中包含有關音頻信息的數據,而另一種中包含有關生物識別數據信息的數據。 它們都將具有一個帶有unix時間戳的列。 音頻CSV中的數據是每秒鍾,而生物識別數據是每分鍾。

我想向具有相同索引(或鍵)值的CSV附加一行,以便數據在兩個文件之間具有公共鏈接。 如果我調用索引1,我想從兩個索引為1的文件中獲取數據。

音頻文件的長度將確定按鍵的開始和停止位置。 因此,如果我有一個2分鍾長的音頻文件,則生物特征數據CSV中的2行將具有0的鍵,而120行音頻CSV將具有0的鍵。

如果該音頻文件的長度為3分鍾,則生物統計CSV的前3行的鍵為0,而音頻CSV的前180行的鍵為0。

您可以打開兩個文件,讀取第一行以了解時間戳,然后從具有較早時間戳記的文件中讀取行,直到不再具有較早時間戳記為止或結束。

如果是by-minute.csv

1394589660,minute 1
1394589720,minute 2

這是by-second.csv

1394589659,second -1
1394589660,second 0
1394589661,second 1
1394589662,second 2
1394589663,second 3
1394589664,second 4
…
1394589718,second 58
1394589719,second 59
1394589720,second 60
1394589721,second 61

然后這段Java代碼:

import java.io.*;
import java.text.*;
import java.util.*;

public class Foo {

    public static void main(String[] args)
    throws Exception
    {
        BufferedReader byMinute = new BufferedReader(
            new InputStreamReader(
            new FileInputStream("by-minute.csv")));

        BufferedReader bySecond = new BufferedReader(
            new InputStreamReader(
            new FileInputStream("by-second.csv")));

        String byMinuteLine = byMinute.readLine();
        String bySecondLine = bySecond.readLine();

        while (byMinuteLine != null || bySecondLine != null) {

            /* If either file is done, print lines from the other file */
            if (byMinuteLine == null) {
                System.out.println(indicize(bySecondLine));
                bySecondLine = bySecond.readLine();
            } else if (bySecondLine == null) {
                System.out.println(indicize(byMinuteLine));
                byMinuteLine = byMinute.readLine();
            } else {
                /* Otherwise print the earlier entry */
                long minuteTime = getTimeStamp(byMinuteLine);
                long secondTime = getTimeStamp(bySecondLine);

                if (secondTime < minuteTime) {
                    System.out.println(indicize(bySecondLine));
                    bySecondLine = bySecond.readLine();
                } else {
                    System.out.println(indicize(byMinuteLine));
                    byMinuteLine = byMinute.readLine();
                }
            }
        }

    }

    static long getTimeStamp(String line) {
        return Long.valueOf(line.split(",")[0]);
    }

    static String indicize(String line) {
        return ((getTimeStamp(line) - 1394589660) / 20)
            + line.substring(line.indexOf(","));
    }

}

將打印出:

0,second -1
0,minute 1
0,second 0
0,second 1
0,second 2
0,second 3
0,second 4
0,second 5
0,second 6
0,second 7
0,second 8
0,second 9
…
2,second 55
2,second 56
2,second 57
2,second 58
2,second 59
3,minute 2
3,second 60
3,second 61

現在,我知道這並不是您要找的東西,但是我希望這足以讓您入門!

暫無
暫無

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

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