en python, vous pouvez faire quelque chose comme (je pense que ce serait similaire dans de nombreuses autres langues aussi).
Dans Emacs Lisp, feriez-vous quelque chose comme p> que j'ai eu l'inspiration (et le code) de EMACS LISP: Processus Un fichier ligne-by-ligne em>. Ou devrais-je essayer quelque chose de totalement différent? Et comment supprimer le "" code> de l'instruction Imprimer? p> p>
3 Réponses :
Voici ce que je suis venu avec. Regarde beaucoup plus idiomatique pour moi:
EMACS LISP ne convient pas au traitement des flux de fichiers. L'ensemble du fichier doit être lu à la fois:
(defun my-line-fun (line) (concat "prefix: " line)) (let* ((in-file "in") (out-file "out") (lines (with-temp-buffer (insert-file-contents in-file) (split-string (buffer-string) "\n\r?")))) (with-temp-file out-file (mapconcat 'my-line-fun lines "\n")))
Split-String Code> sans aucun argument par défaut est par défaut sur le fractionnement sur
SPLAST-String-Séparateurs par défaut code>, qui est
"[\ f \ t \ n \ r \ v] + " code> par défaut. Vous voulez probablement passer
"[\ n \ r] +" code> dans explicitement comme deuxième argument.
Et techniquement, "Emacs Lisp ne convient pas au traitement des flux de fichiers" n'est pas vrai; Vous pouvez utiliser un filtre de processus, mais il est beaucoup plus compliqué et la lecture de l'ensemble du dossier est probablement le moyen le plus simple de faire des choses. Si la lecture d'un flux (tel qu'une prise réseau) est vraiment nécessaire, vous devrez probablement utiliser un filtre de processus (voir le manuel ELISP).
Merci: Utilisation fixe de chaîne scindante.
En fait, vous pouvez traiter stdin code>.
Si vous souhaitez un traitement par lots de Voici un exemple de programme qui est comme stdin code> et d'envoyer le résultat à
stdout code>, vous pouvez utiliser le - script Option de ligne de commande sur EMACSS, qui vous permettra d'écrire du code qui se lit à partir de
stdin code> et écrit sur
stdout code> et
starr code>.
chat code>
, sauf qu'il renverse chaque ligne: p> dcba
4321
zyx
Référencement croisé à la réponse suivante qui montre comment transmettre des arguments de ligne de commande supplémentaires aux scripts EMACS: Stackoverflow.com/questions/6238331/...
Au lieu de (conditionné ...) code>, vous pouvez utiliser
(ignorer les erreurs ...) code>, qui fait la même chose. Encore mieux, supprimez l'utilisation de
condition de condition code> et remplacez
(lecture-from-mini-minibuffer "") code> avec
(Ignorer les erreurs (lecture-from-minibuffer " "))) code>.