处理 - loadStrings()不区分大小写

时间:2017-02-07 15:01:18

标签: processing case-sensitive case-insensitive

有没有办法在Processing中加载文本文件而忽略文件名的大小写?我打开多个csv文件,有些扩展大写," .CSV"而不是标准" .csv",由于loadStrings()函数区分大小写而导致错误。

String file = sketchPath("test.csv");
String[] array = loadStrings(file);

上面给出了错误:

  

此文件名为test.CSV而不是test.csv。重命名文件或更改代码。

我需要一种方法来使文件名或扩展名无关紧要。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

简短回答:不会。文件的区分大小写来自操作系统本身。

更长的答案:您可以创建仅尝试从多个位置加载的代码。

另一种方法是使用Java的File类,它具有在目录下列出各种文件的功能,然后迭代它们并找到所需的文件。更多信息可在the Java reference中找到,但它可能如下所示:

String[] array = null;
File dir = new File(sketchPath(""));
for(String file : dir.list()){
   if(file.startsWith(yourFileNameHere)){
      array = loadStrings(file);
      break;
   }
}

我还没有测试过这段代码,所以你可能需要稍微玩一下,但这是基本的想法。当然,您可能只是想提前重命名文件以避免此问题。

答案 1 :(得分:1)

为什么不从错误本身获取新文件名?要将错误陈述添加到String,我们需要将loadStrings括在trycatch语句中。

String[] array;
String file = "heLlo.txt";
try {
  //if all is good then we load the file
  array = loadStrings(file);
}catch(Exception e){
  //otherwise when we get the error, we store it in a String
  String error = e.toString();

然后我们需要使用正则表达式来使用match从错误语句中获取文件名。正则表达式是/named ([^ +])/(可以假设文件名中没有任何空格)。

  String[]matches = match(error, "named ([^ ]+)");

包含匹配项的数组中元素1的捕获组。那就是“真正的”文件名,

  String realFile = matches[1];

最后,我们加载真实文件并将其存储在我们的数组中。

  array = loadStrings(realFile);
}

当然,如果您愿意,可以将所有这些放入一个函数中,这样您每次加载文件时都不必反复使用此代码。但很明显,如果您提前重命名或检查文件名,那将会更容易。