从两个数组列表中查找最接近的数字

DroidX

最近,我的一台数据服务器出现故障,大量视频文件被损坏(超过15,000个文件,或超过60TB)。我编写了一个脚本来检查所有文件,并将结果放入一个很大的log.txt文件中(将近8GB)。

我编写了代码,以查找以"Input #0"和包含的所有行"damaged",然后将其行号添加到中ArrayList接下来,我需要比较这两个ArrayList,并找到最接近的行list2号,list1以便从日志文件中获取文件名。

例如:如果list1包含数字{1、5、45、55、100、2000 ...等},并且list2包含数字{50、51、53、2010 ...等},则结果应为{45,2000 ... ETC}

这是我当前的代码:

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的新手,我需要帮助。

亚伯拉罕·达巴格(Abraham Al-Dabbagh)

您定义了两个扫描仪(似乎没有必要),但是您仅使用其中一个并在其上调用nextline()两次。看来这不是故意的,结果您得到的结果是错误的。如果您可以从日志文件中发布样本摘录(可以过滤敏感数据),这样对我们很有帮助,那么我们可以确定哪种方法最好。

我认为您应该放弃当前的方法,因为这似乎并不是解决需要查找损坏文件名的有效方法。

根据数据的外观,您可以使用正则表达式,甚至可以将文件名直接提取到Set中。

编辑:添加了一些粗略的代码,如果您确实正确地每个文件都以“输入#0”开头,则应该为您完成此工作。只要每个文件的日志数据中都有一个模式,那么您就应该始终能够直接提取所需的数据,而不用经历两个单独的数组列表中的匹配条目的混乱情况。

public static void main(String [] args) throws FileNotFoundException{
    Set<String> damagedFiles = new LinkedHashSet<String>();
    File file = new File("C:\\log.txt");
    Scanner scanner = new Scanner(file);
    String filename = null;


    try {
        int lineNum = 0;
        while (scanner.hasNextLine()){
            String line = scanner.nextLine();
            if(line.startsWith("Input #0")){
                /*if desired, can use a regex lookahead to get only the path and filename
                    instead of the entire Input #0 line */
                filename = line;
            }
            if(line.contains("damaged")){
                if (filename != null){
                    damagedFiles.add(filename);
                }
            }
        }
    } finally {
        scanner.close();
        for (String s : damagedFiles){
            System.out.println(s);
        }
    }
}

这是在示例日志文件上运行此代码时得到的结果,其中我将损坏的文件命名为dmg#.m2v

Input #0, mpegvideo, from '/cinegy/cinegy/VIDEO/BSF/BLOK 3 - 14. dmg1.m2v':
Input #0, mpegvideo, from '/cinegy/cinegy/VIDEO/BSF/BLOK 3 - 14. dmg2.m2v':
Input #0, mpegvideo, from '/cinegy/cinegy/VIDEO/BSF/BLOK 3 - 14. dmg3.m2v':
Input #0, mpegvideo, from '/cinegy/cinegy/VIDEO/BSF/BLOK 3 - 14. dmg4.m2v':

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从两个数组列表中查找最接近的数字

来自分类Dev

在两个数组中查找最接近的数字

来自分类Dev

在两个数组中查找最接近的数字

来自分类Dev

如何使用lodash从数组中获取最接近目标的前两个数字?

来自分类Dev

c# 在具有两列到两个数字参数的列表中找到最接近的两个数字

来自分类Dev

最接近的数字,基于两个数字

来自分类Dev

Javascript检查与两个数字数组最接近的不同

来自分类Dev

来自两个数组的最接近值的集合

来自分类Dev

在整数数组中查找最接近的数字

来自分类Dev

在圆形数组中查找最接近的数字

来自分类Dev

查找一个数字中的两个相似或接近的因子

来自分类Dev

查找最接近列表目标和的数字

来自分类Dev

如何在Python中找到没有重复的两个数组中最接近的元素,并在Python中返回两个数组的索引?

来自分类Dev

如何找到自定义函数的最接近的两个数字

来自分类Dev

查找与给定数字最接近的k个数字

来自分类Dev

在字典中查找数字的最接近的下键

来自分类Dev

从颜色列表中查找最接近的颜色

来自分类Dev

在另一个数组的特定列中查找数组中最接近的元素

来自分类Dev

从点数组中查找最接近的点

来自分类Dev

从点数组中查找最接近的点

来自分类Dev

查找两个无重复的numpy数组之间最接近的对的最快方法

来自分类Dev

在数字列表中查找数字对最接近的匹配项的算法

来自分类Dev

如何在数组中找到与整数和数字之间的两个最接近的差

来自分类Dev

从R中的两个数据表中找到最接近的邮政编码

来自分类Dev

如何从两个数据框中按最接近的日期进行匹配?

来自分类Dev

R中两个数据帧之间句子的最接近匹配

来自分类Dev

查找几个数组之间最接近的匹配

来自分类Dev

如何找到最接近某个数字的数组元素?

来自分类Dev

Ruby-查找数组中是否有两个数字相乘等于第三个数字

Related 相关文章

  1. 1

    从两个数组列表中查找最接近的数字

  2. 2

    在两个数组中查找最接近的数字

  3. 3

    在两个数组中查找最接近的数字

  4. 4

    如何使用lodash从数组中获取最接近目标的前两个数字?

  5. 5

    c# 在具有两列到两个数字参数的列表中找到最接近的两个数字

  6. 6

    最接近的数字,基于两个数字

  7. 7

    Javascript检查与两个数字数组最接近的不同

  8. 8

    来自两个数组的最接近值的集合

  9. 9

    在整数数组中查找最接近的数字

  10. 10

    在圆形数组中查找最接近的数字

  11. 11

    查找一个数字中的两个相似或接近的因子

  12. 12

    查找最接近列表目标和的数字

  13. 13

    如何在Python中找到没有重复的两个数组中最接近的元素,并在Python中返回两个数组的索引?

  14. 14

    如何找到自定义函数的最接近的两个数字

  15. 15

    查找与给定数字最接近的k个数字

  16. 16

    在字典中查找数字的最接近的下键

  17. 17

    从颜色列表中查找最接近的颜色

  18. 18

    在另一个数组的特定列中查找数组中最接近的元素

  19. 19

    从点数组中查找最接近的点

  20. 20

    从点数组中查找最接近的点

  21. 21

    查找两个无重复的numpy数组之间最接近的对的最快方法

  22. 22

    在数字列表中查找数字对最接近的匹配项的算法

  23. 23

    如何在数组中找到与整数和数字之间的两个最接近的差

  24. 24

    从R中的两个数据表中找到最接近的邮政编码

  25. 25

    如何从两个数据框中按最接近的日期进行匹配?

  26. 26

    R中两个数据帧之间句子的最接近匹配

  27. 27

    查找几个数组之间最接近的匹配

  28. 28

    如何找到最接近某个数字的数组元素?

  29. 29

    Ruby-查找数组中是否有两个数字相乘等于第三个数字

热门标签

归档