[英]java adding two int arrays with different lengths. why giving a result that is smaller than correct result?
[英]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.