首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在txt文件中读取分离和存储变量(String、Double和int),以便以后使用。

在txt文件中读取分离和存储变量(String、Double和int),以便以后使用。
EN

Stack Overflow用户
提问于 2012-07-09 05:59:13
回答 2查看 2.4K关注 0票数 0

初学者java程序员,我正在寻找一种方法来读取一个txt文件(从一个帐户输出),同时操作与shift类型、事务类型和成本相关的某些数据,以给我想要的结果。

任何帮助都将不胜感激。

txt文档中的示例行:

“"NIGHTSHIFT",1486510814,”,"05-07-2012 10:32:42",“层压板A4",10,10 False,130

因此,我需要的相关信息是粗体,文本行中的其余信息与此无关。

在这里,我需要找到的总成本的所有卡交易作出昨天(05-07-2012年)在夜班。

到目前为止,我一直试图在夜班时分开。还考虑过使用数组并将每个值存储到自己的变量中,但发现这太困难了。

代码语言:javascript
复制
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美元

我希望我已经问清楚了。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-07-09 06:05:26

如果数据总是保持相同的格式,我建议您使用CSV解析器,例如Java来解析您的文件。假设该文件具有标准格式,则选择所需字段应该没有问题。

如果要删除引号("),可以使用.replaceAll("\"","");函数删除它们(一旦拆分了数据并获得了所需的字段)。

最后,正如上一篇文章所述,您可以检查某个日期是否恰好是昨天的日期:

代码语言:javascript
复制
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类,因为它与floatdouble相比没有舍入问题),并执行所需的任何数学操作。

这一切都应该反过来,给你你想要的。

票数 1
EN

Stack Overflow用户

发布于 2012-07-09 07:50:07

你可以试试这样的东西:

代码语言:javascript
复制
    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());
    }
    // }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11389723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档