有没有办法在Processing中加载文本文件而忽略文件名的大小写?我打开多个csv文件,有些扩展大写," .CSV"而不是标准" .csv",由于loadStrings()
函数区分大小写而导致错误。
String file = sketchPath("test.csv");
String[] array = loadStrings(file);
上面给出了错误:
此文件名为test.CSV而不是test.csv。重命名文件或更改代码。
我需要一种方法来使文件名或扩展名无关紧要。有什么想法吗?
答案 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
括在try
和catch
语句中。
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);
}
当然,如果您愿意,可以将所有这些放入一个函数中,这样您每次加载文件时都不必反复使用此代码。但很明显,如果您提前重命名或检查文件名,那将会更容易。