所以,我有這個 CSV 檔案,我需要做一個程式,可以在用戶插入日期的情況下搜索 CSV(所有日期都是 csv 中的值)。老實說,我完全不知道該怎么做,如果你們中的任何人都可以幫助我,那就太好了!CSV 行示例:
6288,Ossidi di Azoto,μg/m3,551,Arconate v. DeGasperi,182,MI,Arconate,20/01/1999
這是迄今為止我使用在線示例完成的代碼,但我認為其中的任何內容都不是正確的
public String ricercaCsv(int CercaIndice, String CercaStringa, String CercaData) throws IOException {
String RigaRisultato = null;
BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\leona\\IdeaProjects\\PrjAria\\src\\Aria.csv"));
String linea;
while ( (linea = br.readLine()) != null ) {
String[] values = linea.split(",");
if(values[CercaIndice].equals(CercaStringa)) {
RigaRisultato = linea;
break;
}
}
br.close();
return RigaRisultato;
}
uj5u.com熱心網友回復:
Mykong在他的文章中回答了。
第1部分:
如果可以的話,我個人的方法是使用外部庫:
try (CSVReader reader = new CSVReader(new FileReader("file.csv"))) {
String[] lineInArray;
while ((lineInArray = reader.readNext()) != null) {
System.out.println(lineInArray[0] lineInArray[1] "etc...");
}
}
和
<!-- https://mvnrepository.com/artifact/com.opencsv/opencsv -->
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.6</version>
</dependency>
如果您使用與 Maven 不同的東西,請參閱 Maven 上的專案構建器的語法。
第 2 部分:
理想情況下,當您知道要查找日期10/10/1999時,我建議轉換這些日期(假設它應該一直是同一列)。
可能的例子,
String date = "10/10/1999";
SimpleDateFormat sdt = new SimpleDateFormat("dd/MM/YYYY");
Date result = sdt.parse(date);
uj5u.com熱心網友回復:
如果我做對了,您的 csv 行以日期列結尾,并且您正在搜索以用戶輸入的日期結尾的行。因此,您根本不需要拆分行,只需使用Strings.endsWith()每行來檢查匹配項。
所以最簡單的解決方案是使用 java.nio 包中的方法來讀取檔案并過濾您需要的行。以下是三種方式:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
....
public String ricercaCsv_1(String CercaData) throws IOException {
final String fileName = "C:\\Users\\leona\\IdeaProjects\\PrjAria\\src\\Aria.csv";
final Stream<String> fileContent = Files.lines(Paths.get(fileName));
return fileContent.filter(line -> line.endsWith(CercaData)).findFirst().orElse(null);
}
按名稱搜索上述方法的示例用法:
String result = ricercaCsv_1("19/05/2022");
如果您想堅持使用您的方法BufferedReader
public String ricercaCsv_2(String CercaData) throws IOException {
String RigaRisultato = null;
BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\leona\\IdeaProjects\\PrjAria\\src\\Aria.csv"));
String linea;
while ( (linea = br.readLine()) != null ) {
if(linea.endsWith(CercaData)) {
RigaRisultato = linea;
break;
}
}
br.close();
return RigaRisultato;
}
按名稱搜索上述方法的示例用法:
String result = ricercaCsv_2(8, "19/05/2022");
如果您想重用您的方法并能夠通過僅傳遞列索引來搜索任何列,則如下所示應該可以:
public String ricercaCsv_3(int CercaIndice, String CercaStringa) throws IOException {
String RigaRisultato = null;
BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\leona\\IdeaProjects\\PrjAria\\src\\Aria.csv"));
String linea;
while ( (linea = br.readLine()) != null ) {
String[] values = linea.split(",");
if(values[CercaIndice].equals(CercaStringa)) {
RigaRisultato = linea;
break;
}
}
br.close();
return RigaRisultato;
}
按名稱搜索上述方法的示例用法:
String result = ricercaCsv_3(8, "19/05/2022");
uj5u.com熱心網友回復:
您可以使用集算器 SPL(一種基于 Java 的資料處理開源腳本語言)輕松地在 CSV 檔案中逐行搜索,例如:
...
Class.forName("com.esproc.jdbc.InternalDriver");
con = DriverManager.getConnection("jdbc:esproc:local://");
st = con.prepareStatement("==file(\"data.csv\";\"UTF-8\").import@c().select(_9==\"23/01/1999\")");
ResultSet rs = st.getResultSet();
...
和
<!-- https://mvnrepository.com/artifact/com.scudata.esproc/esproc -->
<dependency>
<groupId>com.scudata.esproc</groupId>
<artifactId>esproc</artifactId>
<version>20220402</version>
</dependency>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/478341.html
