D'accord, j'utilise donc Perl pour lire dans un fichier contenant des données de configuration générales. Ces données sont organisées en en-têtes en fonction de ce qu'ils veulent dire. Un exemple suit: objectif: en utilisant la première ligne comme exemple "$ var = 10;", j'aimerais utiliser la fonction divisée dans Perl pour créer un tableau contenant le tableau Caractères "$ var" et "10" comme éléments. En utilisant une autre ligne comme exemple: p> Ceci est nécessaire car je vais émettre ces valeurs dans un nouveau fichier (lequel une pièce de code C ++ différente va lire) pour instancier le dictionnaire objets. Juste pour vous donner un peu de goût de ce que cela pourrait ressembler (ce qui en fait juste comme je vais): p> oh, et voici le code que j'ai actuellement sur avec ce qu'il fait (incorrectement): p> Pour répondre à une question, pourquoi je n'utilise pas config :: Simple, est que je ne savais pas ce que mon fichier de configuration ressemblerait à ce que je voulais faire. Compte tenu de même que je suis allé - au moins ce qui me semblait judicieux - et en utilisant Perl pour analyser le fichier. p> Le problème est que j'ai un code C ++ qui chargera les informations du fichier de configuration, mais que l'analyse de C ou C ++ est :( J'ai décidé d'utiliser Perl. C'est aussi un bon exercice d'apprentissage pour moi depuis Je suis nouveau dans la langue. C'est donc la chose, ce code Perl n'est pas vraiment en dehors de ma candidature, cela facilite simplement le code C ++ de lire les informations. Et, il est plus lisible (à la fois le fichier de configuration et Le fichier généré). Merci pour les commentaires, cela a vraiment aidé. P> P>
5 Réponses :
On dirait que tu l'as eu. Stripez les espaces bleus avant la division.
sub makeref($) { s/\s+//g; my @line = (split(/=/)); # gets ["verbose", "true"] }
Ahh c'est tellement évident maintenant. Merci, je suis nouveau à Perl et c'est une langue vraiment cool.
Curieusement, Chomomp ne chante pas de blouses!
Vous avez raison, j'y ai pensé et la solution de regex est meilleure, passez avec ça.
Veuillez noter la sélection de la syntaxe en désordre.
@Tommy Lire perdoc -f chomp code> pour savoir ce que
chomp code> fait
chomp code>.
J'espère que vos paramètres et vos valeurs n'ont pas d'espaces: couleur de fond = rouge foncé code>
Ce code fait l'astuce (et est plus efficace sans renverser).
Vous pouvez ajouter un 'g' à la fin de la regex pour l'obtenir pour remplacer plus d'une apparence supplémentaire d'espaces. I.e. s / ^ \ s + // g; code>
Veuillez noter la sélection de la syntaxe en désordre.
Il existe de nombreux modules qui gèrent des sections de configuration, des lignes de continuation, des variables avec plusieurs valeurs, etc., etc. sur CPAN. Utilisez l'un d'entre eux une fois que vous avez terminé d'apprendre. J'aime config :: std code>. @Fm a signalé
config :: simple code>.
Split code> se divise sur une expression régulière, vous pouvez simplement mettre le blancheur autour du
= code> Connexion dans sa regex:
$line =~ s/^\s+//;
$line =~ s/\s+$//;
Veuillez noter la sélection de la syntaxe en désordre.
C'est pourquoi j'ai tendance à utiliser s {...} {...} code> lors de la publication sur SO.
S / ^ \ S + // code> est légèrement plus efficace.
Oui, s'il y a zéro caractères blancheurs, s / ^ \ s * // code> ne remplace rien avec rien - pourquoi déranger?
Si vous faites cette analyse comme un exercice d'apprentissage, c'est bien. Cependant, CPAN a plusieurs modules qui feront beaucoup de travail pour vous.
use Config::Simple; Config::Simple->import_from( 'some_config_file.txt', \my %conf );
Ouais, je dois vraiment demander pourquoi l'OP utilise ce qui est très similaire à un format de fichier de configuration standard, mais n'utilise pas les modules de lecteur de fichier de configuration standard facilement disponibles et très bien testés. (YAML est un autre bien à regarder si config :: simple ne correspond pas tout à fait le format souhaité.)
95% Time C'est ce qui serait recherché. J'ai des raisons (l'apprentissage, pas tout mon code est à Perl) qui facilite la tâche de le faire différemment.
Vous avez probablement tout compris, mais je pensais ajouter un peu. Si vous
this is a parameter = all sorts of stuff here
N'utilisez pas de prototypes à moins d'être nécessaires. Même alors, pensez à trois fois. perdoc.perl.org/perlsub.html#prototypes C'est tout ce qui est très puissant, bien sûr, et ne devrait être utilisé que de modération pour rendre le monde meilleur. I>
S'il vous plaît voir la réponse de FM. Vous ne devriez vraiment pas écrire votre propre analyseur de fichiers pour effectuer un travail aussi courant et standard - Utilisez un CPAN et concentrez-vous sur votre logique d'application.