6
votes

Erlang lu du fichier les 5 premières lignes

Par exemple, j'ai un fichier TXT avec 10 chaîne de texte. Comment puis-je lire les 5 premières chaînes de ce texte avec Erlang?

merci.


2 commentaires

@OP: Vous êtes invité à accepter une réponse, si l'une des réponses publiait votre question et que vous en êtes satisfait.


@Arunmu: Un utilisateur verra le commentaire, ajouté à son poste (elle), même s'il n'y a pas de @ devant le Nick. ;-)


3 Réponses :


1
votes

Utilisez le module IO d'Erlang.

io: lu (fd, '').

où fd est la poignée de fichier.

aussi s'il vous plaît prenez aussi la recherche de l'Erlang Doc Pour la syntaxe correcte.

Voici un code rugueux xxx

Vous pouvez utiliser un comptoir si vous souhaitez traiter seulement 10 lignes


2 commentaires

Je vois que vous avez mentionné la chaîne ou que vous avez des lignes que vous avez destinées à dire ?? S'il s'agit de chaîne..then lisez la première ligne et la jetez-la à l'aide du module de chaîne d'Erlang ... ou utilisez le style de programmation fonctionnel classique classique :)


Ceci lit les termes, pas des chaînes :-) "lit un terme terme à partir de l'entrée standard ( iodevice ), en l'invite à l'invite ".



8
votes

Vous voulez probablement une combinaison de Fichier: Ouvrir / 2 Code> et Fichier: read_line / 1 code> avec tampon activé.

une rime: p> xxx pré>

fichier source: p> xxx pré>

brut code>, dans modes code>, transmis au fichier : ouvrir / 2 code>, permet un accès plus rapide à un fichier, car aucun processus Erlang n'est nécessaire pour Manipulez le fichier. p>

Exemple Exemple: P>

5> lists:map(fun(X) -> string:strip(X, right, $\n) end, Lines).
["Mary had a little lamb,","little lamb, little lamb,",
 "Mary had a little lamb,",
 "whose fleece was white as snow.",
 "And everywhere that Mary went,"]
6>


0 commentaires

2
votes

Une autre solution, N_Times peut être utilisé ailleurs:

-module(n_times).

-export([test/0]).

test() ->
  io:format("~p~n", [n_lines("n_times.erl", 5)]).

n_lines(FileName, N) ->
  {ok, FileDev} = file:open(FileName, [raw, read, read_ahead]),
  try
    n_times(fun() -> {ok, L} = file:read_line(FileDev), L end, N)
  after
    file:close(FileDev)
  end.

n_times(F, N) ->
  n_times(F, N, []).

n_times(_, 0, A) ->
  lists:reverse(A);
n_times(F, N, A) ->
  n_times(F, N-1, [F()|A]).


0 commentaires