2016-08-18 1 views
-4

Je dois créer un programme qui lit un fichier texte et vérifie les 8 données sur chaque ligne pour certains critères. J'ai eu le programme pour lire le fichier texte correctement, et j'ai mis en place un tokenizer pour séparer les données du fichier texte dans les 8 jetons distincts. Je dois trouver un bon moyen de tester les jetons contre d'éventuelles erreurs. Des moyens faciles de le faire? Voici la liste des erreurs.Besoin d'aide pour tester les jetons contre les erreurs

CODE ERREUR

Un code de facturation est trop courte

B Code facture ne possède pas les bons caractères

C facture chiffres de code sont tous nuls

D champ Nom a moins de deux mots

E Le champ de nom comporte plus de quatre mots

F champ Nom n'a pas de virgule

G champ Nom a un mauvais titre

H champ Nom a une mauvaise première

I Prix de vente n'a pas de point décimal

J Prix de vente a plus d'un point décimal

K prix de vente a un zéro

L Genre a mauvais s ymbols (contient lettre majuscule ou contient des symboles)

M Date Ordre est six caractères

N Date de commande n'est pas tous les chiffres

P Date de la commande n'est pas une date légale

Q Expédition date n'est pas six caractères

T Date livraison ne sont pas tous les chiffres

U la date d'expédition n'est pas une date légale

V erreur Non classés

Chaque champ pourrait contenir jusqu'à une erreur. Ainsi, chaque enregistrement peut comporter jusqu'à six erreurs. Chaque champ doit être vérifié pour les erreurs dans l'ordre que les erreurs ci-dessus sont listed.INVOICE CODE exactement 6 caractères

NOM DU CLIENT 30 caractères maximum

PRIX DE VENTE 8 caractères maximum

10 caractères maximum GENRE

DATE dE COMMANDE exactement 6 caractères

DATE d'EXPEDITION exactement 6 caractères

Ces champs sont séparés par un point-virgule.

Le code de facturation est censé être trois lettres majuscules suivies de trois chiffres dont au moins un chiffre n'est pas zéro.

Le nom du client doit se présenter sous la forme nom de famille suivi d'une virgule, puis d'un titre facultatif, d'un prénom et d'une seconde initiale facultative. Les titres doivent être l'une des lettres de M., Mme, Dr., Mlle, ou Mme Milieu doit être une lettre majuscule suivie d'une période. Les mots devraient être délimités par un seul espace.

Le prix de vente a deux chiffres décimaux à gauche de la virgule décimale. Le prix ne devrait pas avoir de zéro.

Le genre ne doit contenir que des lettres minuscules.

Les deux dates doivent être au format MMDDYY où les six caractères sont des chiffres.

Les dates doivent être des dates légales. La date de commande/date d'expédition peut ne pas être postérieure à la date du jour.

Voici mon code complet:

package Project3; 

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.StringTokenizer; 

public class Main { 

public static void main(String[] args) throws IOException{ 

BufferedReader in = new BufferedReader(new FileReader("movie.dat")); 
String line; 
String token; 
String delimiter = ";"; 
StringTokenizer tokenizer; 


while((line = in.readLine()) != null){ 
    tokenizer = new StringTokenizer(line, delimiter); 

    while (tokenizer.hasMoreTokens()){ 
     token = tokenizer.nextToken(); 
     System.out.print("Invoice Code: "+token+" "); 
     if(token.length() == 6){ 
     } 
      else{ 
      System.out.println("A"); 
      } 
     if() 
     token = tokenizer.nextToken(); 
     System.out.print("Customer Name: "+token+" "); 
     token = tokenizer.nextToken(); 
     System.out.print("Sale Price: "+token+" "); 
     token = tokenizer.nextToken(); 
     System.out.print("Genre: "+token+" "); 
     token = tokenizer.nextToken(); 
     System.out.print("Order Date: "+token+" "); 
     token = tokenizer.nextToken(); 
     System.out.print("Shipping Date: "+token+" "); 
     } 
    System.out.println(); 
    } 


in.close(); 
} 

}

+0

Vous devriez apprendre à utiliser RegEx. – Blobonat

+0

Pouvez-vous s'il vous plaît poster un exemple de dossier? –

+0

Vous devez savoir (et peut-être que vous savez déjà, alors bien) les champs et les exigences plus en détail. Pour le code A, par exemple, vous devez savoir quel champ est le code de facturation et quelle est la longueur minimale. Plus précisément, le code V ressemble à un mystère - peut-être que vous n'avez pas besoin de l'utiliser, ou peut-être vous pouvez l'utiliser si vous découvrez des erreurs qui ne relèvent pas des autres codes. –

Répondre

0

Il semble que vous devez d'abord regrouper les codes par domaine. Selon le format, vous pouvez vous en sortir avec un simple split() au lieu d'un tokenizer.

Pour simplifier les choses, je créerais une méthode dans la classe pour chaque vérification de champ. Ensuite, dans la méthode respective, vous devez l'analyser (via regex) et générer les codes d'erreur (le cas échéant). La méthode renverrait le code d'erreur ou rien (vous devrez définir ce que rien signifie pour vous).

Vous pouvez ensuite adapter la deuxième partie du code pour imprimer les codes d'erreur.

+0

Je comprends le concept, mais je ne sais pas exactement comment le code aurait l'air. Serais-tu capable d'écrire un petit exemple? Je suis assez nouveau à Java. –