初学者java程序员,我正在寻找一种方法来读取一个txt文件(从一个帐户输出),同时操作与shift类型、事务类型和成本相关的某些数据,以给我想要的结果。
任何帮助都将不胜感激。
txt文档中的示例行:
“"NIGHTSHIFT",1486510814,”,"05-07-2012 10:32:42",“层压板A4",10,10, False,130
因此,我需要的相关信息是粗体,文本行中的其余信息与此无关。
在这里,我需要找到的总成本的所有卡交易作出昨天(05-07-2012年)在夜班。
到目前为止,我一直试图在夜班时分开。还考虑过使用数组并将每个值存储到自己的变量中,但发现这太困难了。
import java.io.File;
import java.io.FileNotFoundException;
import java.text.SimpleDateFormat;
import java.util.*;
public class Finder{
public static void main (String args[]) throws FileNotFoundException
{
Calendar today = Calendar.getInstance();
SimpleDateFormat formatter=
new SimpleDateFormat("dd-MM-yyyy");
today.add(Calendar.DATE, -1);
String yesterday = formatter.format(today.getTime());
Scanner sc = new Scanner(new File("textdocument.log"));
while(sc.hasNextLine()) {
String[] numstrs = sc.nextLine().split(yesterday + "\"NIGHTSHIFT\""); // split by "
for(int i = 0; i < numstrs.length; i++)
{
System.out.println(numstrs[i]);
System.out.println();
}
}
}
}期望产出:
05-07-2012年夜班总数
现金共计20美元
信用卡共计40美元
Eftpos共计20美元
我希望我已经问清楚了。
谢谢
发布于 2012-07-09 06:05:26
如果数据总是保持相同的格式,我建议您使用CSV解析器,例如Java来解析您的文件。假设该文件具有标准格式,则选择所需字段应该没有问题。
如果要删除引号("),可以使用.replaceAll("\"","");函数删除它们(一旦拆分了数据并获得了所需的字段)。
最后,正如这上一篇文章所述,您可以检查某个日期是否恰好是昨天的日期:
Calendar c1 = Calendar.getInstance(); // today
c1.add(Calendar.DAY_OF_YEAR, -1); // yesterday
Calendar c2 = Calendar.getInstance();
c2.setTime(getDateFromLine(line)); // your date
if (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)
&& c1.get(Calendar.DAY_OF_YEAR) == c2.get(Calendar.DAY_OF_YEAR)) {
//Do your math here
} 编辑:我将尽量使这一点更加清楚:
我假设您的所有行都具有相同的格式,如:"CARD","05-07-2012 10:32:42","Laminate A4",10,10,"NIGHTSHIFT",1486510814,False,130。这基本上意味着行中的数据将始终保持其顺序,因此,例如,NIGHTSHIFT将始终是行中的第6个值。其他信息也是如此。
由于您所拥有的文件是字符分隔的,在本例中,您可以使用Open来处理该文件。
提取需要的部分之后,如果需要,可以使用.replaceAll函数从提取的数据中删除引号。然后,您可以比较所拥有的字符串(Apache的StringUtils类可能很有用)。
如果字符串等于NIGHTSHIFT,则可以使用昨天附加的代码段继续并检查日期是否为昨天的日期。如果日期匹配,您可以使用Java提取成本,将其转换为一个数字值(由于您正在处理成本,我建议使用BigDecimal类,因为它与float或double相比没有舍入问题),并执行所需的任何数学操作。
这一切都应该反过来,给你你想要的。
发布于 2012-07-09 07:50:07
你可以试试这样的东西:
final Pattern p = Pattern.compile("CARD(.*)NIGHTSHIFT");
// Scanner sc = new Scanner(new File("textdocument.log"));
// while (sc.hasNextLine()) {
final String nextString = "\"CARD\",\"05-07-2012 10:32:42\",\"Laminate A4\",10,10,\"NIGHTSHIFT\",1486510814,False,130";
final StringTokenizer st = new StringTokenizer(p.matcher(
nextString.replaceAll("\"", "")).replaceAll("$1"), ",");
while (st.hasMoreTokens()) {
final StringTokenizer sTmp = new StringTokenizer(st.nextToken()
.trim(), " |-");
try {
final Calendar today = Calendar.getInstance();
final int day = Integer.valueOf(sTmp.nextToken());
final int month = Integer.valueOf(sTmp.nextToken());
final int year = Integer.valueOf(sTmp.nextToken());
today.set(year, month, day);
today.add(Calendar.DAY_OF_YEAR, -1);
System.out
.println(new Date(today.getTimeInMillis()).toString());
} catch (final Exception e) {
// I do not understand why catch is used
System.out.println("Integer hangs, skipped line.");
continue;
}
st.nextToken();
st.nextToken();
System.out.println(st.nextToken());
}
// }https://stackoverflow.com/questions/11389723
复制相似问题