2009-04-08 7 views
0

J'ai une entrée de fichier texte qui contient des données comme ci-dessous. Comment puis-je afficher les données du fichier texte dans un format spécifique?Comment afficher les données du fichier txt dans un format spécifique

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 

Je veux afficher les données du fichier texte dans ce format:

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

est ce devoir? – Seibar

+0

c'était un programme que j'essaie de récupérer et de l'afficher dans un format spécifique – Jessy

Répondre

4

Je viens de jeter cela ensemble rapidement, mais qu'en quelque chose comme:

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()); 
} 

puis invoquez tout par exemple:

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

Merci, les réponses m'ont vraiment aidé. Je me demandais s'il était possible en premier lieu d'écrire des données sur un fichier txt dans un format spécifique plutôt que de l'écrire en premier, puis de le récupérer à nouveau et de l'afficher dans un format spécifique? – Jessy

+0

Tout est possible. C'est juste une question de facilité de codification. =) –

0

Je jeter un oeil à la fonction Java sprintf() et sa capacité à left/right justify données avec des largeurs spécifiées.

0

En ce qui concerne l'analyse de l'entrée:

Une question que vous aurez est que chaque « enregistrement » des données (chaque ligne, dans le résultat) n'est pas une taille fixe. Certains sont 3-tuples de nom, exercice, temps, et d'autres sont 4-tuples de jour, nom, exercice, temps

Cela dit, en supposant que le format que vous avez donné est vraiment tout ce qu'il y a, le problème peut être travaillé autour. Après la lecture d'une ligne, vous pouvez vérifier un jour de semaine, et si c'est le cas, supposons que c'est le début d'un 4-uplet, et lisez les 3 lignes suivantes. S'il ne s'agit pas d'un jour de semaine, supposez qu'il s'agit d'un triplet et lisez seulement les deux lignes suivantes.

S'il existe également des "espaces" dans les colonnes de nom, de type ou d'heure dans la sortie, et dans différentes combinaisons, cela devient plus délicat.

Vous avez vraiment besoin de votre programme pour avoir des connaissances particulières sur les valeurs valides dans quelles colonnes. Par exemple, «Jessica» n'est pas un type d'exercice valide et «Jogging» n'est pas un nom valide.

En ce qui concerne le formatage de la sortie

Brian's answer est pertinente.

Cela dépend de la langue que vous utilisez. La plupart des langues ont un équivalent printf. Les codes de formatage de printf vous permettent de pad avec l'espace, etc.

Si vous utilisez Perl (peut-être bien adapté à cette tâche), vous pouvez utiliser formats

Questions connexes