2009-04-08 74 views
0

我有一个文本文件输入,其中包含以下数据。如何将文本文件中的数据显示为特定格式?如何以特定格式显示txt文件中的数据

Monday 
Jessy 
Walking 
20 minutes 
Matthew 
Run 
20 minutes 
Karen 
Jogging 
40 minutes 
Jessica 
Run 
12 minutes 
Tuesday 
Messia 
Walking 
10 minutes 
Matthew 
Run 
20 minutes 
Pete 
Run 
10 minutes 
Carol 
Walking 
30 minutes 

我想从文本文件中的数据显示为这种格式:

Day   Name    Type of exercise   Time 
Monday   Jessy    Walking     20 minutes 
       Matthew   Run      20 minutes 
       Karen    Jogging     40 minutes 
       Jessica   Run      12 minutes 
Tuesday  Messia    Walking     10 minutes 
       Matthew   Run      20 minutes 
       Pete    Run      10 minutes 
       Carol    Walking     30 minutes 
+0

是这个家庭作业? – Seibar 2009-04-08 21:27:04

+0

这是一个程序,我试图找回并以特定格式显示 – Jessy 2009-04-08 21:28:29

回答

4

我只是把这个一起迅速,但对于这样的:

static final String[] DAYS = 
{ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; 

public class ActivityEvent 
{ 
    public int day; 
    public String name; 
    public String typeOfExercise; 
    public String time; 
} 

public List loadActivities(String filename) throws IOException 
{ 
    List activities = new ArrayList(); 
    FileInputStream fis = new FileInputStream(filename); 
    InputStreamReader isr = new InputStreamReader(fis); 
    BufferedReader br = new BufferedReader(isr); 
    int lastDay = -1; 
    String line; 
    while ((line = br.readLine()) != null) 
    { 
     line = line.trim(); 
     int day; 
     for (day = DAYS.length - 1; day >= 0; day--) 
     { 
      if (line.equals(DAYS[day])) 
      { 
       break; 
      } 
     } 
     String name; 
     if (day < 0) 
     { 
      day = lastDay; 
      if (lastDay < 0) 
      { 
       throw new IOException(filename + " must start with day of week"); 
      } 
      name = line; 
     } 
     else 
     { 
      name = br.readLine(); 
      if (name == null) 
      { 
       throw new IOException(filename + " expected name, reached end of file"); 
      } 
     } 
     String type = br.readLine(); 
     if (type == null) 
     { 
      throw new IOException(filename + " expected type of exercise, reached end of file"); 
     } 
     String time = br.readLine(); 
     if (time != null) 
     { 
      throw new IOException(filename + " expected time of exercise, reached end of file"); 
     } 
     ActivityEvent activity = new ActivityEvent(); 
     activity.day = day; 
     activity.name = name; 
     activity.typeOfExercise = type; 
     activity.time = time; 
     activities.add(activity); 
    } 
    return activities; 
} 

public void printActivities(List activities) 
{ 
    StringBuilder str = new StringBuilder("Day\tName\tType of Exercise\tTime\n"); 
    int numActivities = activities.size(); 
    int lastDay = -1; 
    for (int index = 0; index < numActivities; index++) 
    { 
     ActivityEvent activity = (ActivityEvent)activities.get(index); 
     if (activity.day != lastDay) 
     { 
      str.append(DAYS[activity.day]); 
     } 
     str.append('\t'); 
     str.append(activity.name); 
     str.append('\t'); 
     str.append(activity.typeOfExercise); 
     str.append('\t'); 
     str.append(activity.time); 
     str.append('\n'); 
    } 
    System.out.print(str.toString()); 
} 

,然后调用例如一切:

List activities = loadActivities("somefile.txt"); 
// Do optional sorting, etc. here. 
printActivities(activities); 
0

关于分析输入:

一个问题,你将不得不为每个数据的“记录”(每一行,在输出中)是不是一个固定的大小。 有些是三元组的名称,运动,时间,其他是四元组的天,名称,锻炼,时间

这就是说,假设你给出的格式真的是所有的存在,问题可以解决。

读完一行后,您可以检查一个工作日,如果是这样,假设这是一个4元组的开始,并阅读接下来的3行。 如果不是星期几,那么假设它是一个三元组,并且只读取下两行。

如果输出中的名称,类型或时间列中可能存在“间隙”,并且组合方式变得更复杂。

您确实需要您的程序对哪些值在哪些列中有效有特殊的了解。例如,'杰西卡'不是有效的练习类型,'慢跑'不是一个有效的名字。

关于格式化输出

Brian's answer是相关的。

这取决于您使用的语言。大多数语言都有一个printf等价物。 的printf的格式码让你与空间垫等

如果您正在使用Perl(可能会非常适合这个任务),你可以使用formats

相关问题