Недавно одна из моих серверов данных снизилась и повреждено большое количество видеофайлов (более 15 000 файлов или более 60 ТБ). Я написал сценарий, чтобы проверить все файлы и поместить результаты в очень большой файл log.txt (почти 8 ГБ).Поиск ближайшего номера от двух арраистов
Я написал код, чтобы найти все строки, начинающиеся с "Input #0"
и строки, которые содержат "damaged"
, а затем добавили номера строк в ArrayList
. Затем мне нужно сравнить эти два массива ArrayLists и найти ближайший номер строки в list2
к номеру в list1
, чтобы я мог вернуть имена файлов из файла журнала.
Например: если list1
содержит числа {1, 5, 45, 55, 100, 2000 ... и т.д.} и list2
содержит число, {50, 51, 53, 2010 ... и т.д.} результат должен быть {45, 2000 ... и т.д.}
Это мой текущий код:
import java.io.*;
import java.util.*;
public class Log {
public static void main(String [] args) throws IOException{
ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();
File file = new File("C:\\log.txt");
try {
Scanner scanner = new Scanner(file);
Scanner scanner2 = new Scanner(file);
int lineNum = 0;
int lineNum2 = 0;
while (scanner.hasNextLine()){
String line = scanner.nextLine();
String line2 = scanner.nextLine();
lineNum++;
lineNum2++;
if((line.startsWith("Input #0"))) {
list1.add(lineNum);
}
if((line2.contains("damaged"))) {
list2.add(lineNum2);
}
}
Это то, что я получаю из кода выше:
list1 [5, 262, 304, 488, 523, 1189, 1796, 2503, 2722, 4052, 4201, 4230, 4298, 4312, 4559, 4887, 4903, 5067....]
list2 [1838, 1841, 1842, 1844, 1851, 1861, 1865, 1866, 1868, 1875, 1878, 1879, 1880, 1881, 1886, 1887, 1891....]
Некоторые данные журнала:
Input #0, mpegvideo, from '/cinegy/cinegy/VIDEO/BSF/BLOK 3 - 14. NOVHighb668ca7d201411141051110636.m2v':
.
.
.
.
.
.
данных с повреждением:
Input #0, mpegvideo, from '/cinegy/cinegy/VIDEO/BSF/BLOK 3 - 14. NOVHighb668ca7d201411141051110636.m2v':
.
.
.
.
.
[error 0x090010] file damaged at 16 09
[error 0x090010] file damaged at 19 15
Журнал для каждого отдельного файла не содержит какой-либо шаблон для первых 5-6 линий или так кроме. Оба поврежденных и не поврежденных файла содержат информацию, написанную на 20 - 100+ линиях.
Таким образом, из этих чисел первый результат должен быть номер 1796.
Я довольно много новичок в Java, и мне нужна помощь.
Пример вы предоставляете не то, что вы описали: "если list1 содержит числа {1, 5, 45, 55, 100, 2000 ... и т. д.}, а list2 содержит числа {50, 51, 53, 2010 ... и т. д.}, результат должен быть {45, 2000 ... и т.д.} Зачем? Пожалуйста, объясните, как эти списки имеют этот результат. –
У вас есть определенный диапазон? Например, если цифры имеют разницу менее 50, она должна выводиться? – russellsayshi
Какой следующий номер после 1796 года? – CMPS