2010-04-20 8 views
0
Initialisation multidimentionnelle

J'ai un tableau 3 multidimentionnelle:tableaux

int[][][] env; 

que je voudrais initialiser avec des données dans un fichier texte. Les données dans le fichier texte ressemble à ceci:

{            { { 0, 1,-1},  
                { 0, 2,-1}, 
                {-1,-1,-2}, 
                { 0, 0, 0} }, 

               { { 0, 0,-1}, 
                { 0, 0,-1}, 
                {-1,-1,-2}, 
                { 0, 0, 0} } 
    } 

En fait, les accolades peuvent être enlevés et remplacés par des caractères différents s'il est nécessaire. S'il existe un meilleur moyen de formater les valeurs dans le fichier texte, alors il est le bienvenu.

Je cherche le meilleur moyen d'initialiser le tableau dans le programme java avec les valeurs du fichier texte.

Toute votre aide est appréciée.

Merci.

+3

Amusante, qui est presque le code source valide Java. Peut-être utiliser Javac comme analyseur? :-) –

+0

Avez-vous un fichier au moment de la compilation ou l'avez-vous à l'exécution? –

Répondre

0

Ce code compile:

int[][][] env = 

{            { { 0, 1,-1},  
                { 0, 2,-1}, 
                {-1,-1,-2}, 
                { 0, 0, 0} }, 

               { { 0, 0,-1}, 
                { 0, 0,-1}, 
                {-1,-1,-2}, 
                { 0, 0, 0} } 
    } 

; 

Voulez-vous plus que cela ???


Java n'a pas #include si c'est ce que vous demandez. Si vous avez réellement besoin de lire le contenu du fichier lors de l'exécution, alors c'est une question d'E/S et d'analyse, pas vraiment de tableaux multidimensionnels.

0

Fun!

Le programme Perl suivant transforme les données dans un format plus digeste, où chaque ligne de sortie est les indices de tableau suivis d'une valeur entière. Le programme utilise des regexes continues (les drapeaux "\ G" et "c") pour reprendre où le dernier match s'est arrêté. Il y a un peu de bidouillage avec une tranche de tableau pour gérer le "{...}" externe.

#!perl -w                   
my $content = do {local $/=undef; <>}; 
my @stack =(); 
my $count = 0; 
while (1) { 
    if ($content =~ m/\G\s*\{/cgms) { 
     push @stack, $count; 
     $count = 0; 
    } elsif ($content =~ m/\G\s*\}\s*,?/cgms) { 
     $count = pop @stack; 
     $count++; 
    } elsif ($content =~ m/\G\s*(-?\d+)\s*,?/cgms) { 
     print "@stack[1 .. $#stack] $count $1\n"; 
     $count++; 
    } elsif ($content =~ m/\G\s*\z/cgms) { 
     last; 
    } else { 
     my ($err) = $content =~ m/\G\s*(.{1,20})/cgms; 
     die "Syntax error: $err\n"; 
    } 
} 

est ici la sortie de l'échantillon pour l'ensemble de données:

0 0 0 0 
0 0 1 1 
0 0 2 -1 
0 1 0 0 
0 1 1 2 
0 1 2 -1 
0 2 0 -1 
0 2 1 -1 
0 2 2 -2 
0 3 0 0 
0 3 1 0 
0 3 2 0 
1 0 0 0 
1 0 1 0 
1 0 2 -1 
1 1 0 0 
1 1 1 0 
1 1 2 -1 
1 2 0 -1 
1 2 1 -1 
1 2 2 -2 
1 3 0 0 
1 3 1 0 
1 3 2 0