Bonjour,
je voudrais couper un fichier texte en deux.
par exemple pour un fichier qui contient 200 lignes, je veux avoir deux fichiers qui contiennent chacun 100 lignes. Existe t il une commande prête qui le fait?
Merci pour votre aide!
Bonjour,
je voudrais couper un fichier texte en deux.
par exemple pour un fichier qui contient 200 lignes, je veux avoir deux fichiers qui contiennent chacun 100 lignes. Existe t il une commande prête qui le fait?
Merci pour votre aide!
MATLAB n'est certainement pas le meilleur outil pour faire ce genre d'opération.
Mais bon, admettons que l'on souhaite couper le fichier suivant (data.txt) en deux :Voici la méthode la plus efficace (sauf si le fichier fait plusieurs centaines de Mo) :1
2
3
4
5
6Bien sûr, c'est l'idée qui est présentée ici.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 fid=fopen('data.txt','r'); X=fread(fid,[1,inf]); fclose(fid); idx=findstr(X,[13 10]); % Recherche des caractères de retour à la ligne numLigne=3; % Numéro de la ligne après laquelle on souhaite couper fid=fopen('subdata1.txt','w'); fwrite(fid,X(1:idx(numLigne)-1)); fclose(fid); fid=fopen('subdata2.txt','w'); fwrite(fid,X(idx(numLigne)+2:end)); fclose(fid); edit data.txt edit subdata1.txt edit subdata2.txt
Note : on peut facilement automatiser la recherche de la ligne de coupure pour obtenir deux fichiers de tailles identiques :
Code : Sélectionner tout - Visualiser dans une fenêtre à part numLigne=ceil(numel(idx)/2);
Bonjour Dut,
merci de ta réponse, malheureusement elle ne fonctionne pas avec mes fichiers, en effets j'ai affaire à des fichiers de très grande taille ( 400 mégas et plus), quand j'exécute le code que tu m'as posté le message "out of memory" s'affiche
n'y a t il pas d'autres façons de faire?
Merci!!C'est quoi le meilleur outil? Merci!
Salut,
Essaie d'utiliser la fonction textscan.
a+
As-tu lu la FAQ à ce sujet ?
Out of memory. Type HELP MEMORY for your options.Un langage de plus bas niveau... depuis MATLAB, je dirais PERL car il est possible d'appeler directement les scripts PERL depuis MATLAB.Envoyé par Wassim1
Ensuite, si la rapidité du code n'est pas essentielle, il est toujours possible d'utiliser des structures itératives FOR-END pour éviter le "Out of Memory".
Pour informations, voici la version qui évite le "Out of Memory" sous MATLAB :Après, au niveau rapidité...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 fid=fopen('data.txt','rt'); nLignes=0; while ~feof(fid) fgetl(fid); nLignes=nLignes+1; end fclose(fid); fid=fopen('data.txt','rt'); subfid=fopen('subdata1.txt','wt'); for n=1:nLignes/2 str=fgets(fid); fprintf(subfid,'%s',str); end fclose(subfid); subfid=fopen('subdata2.txt','wt'); for n=nLignes/2+1:nLignes str=fgets(fid); fprintf(subfid,'%s',str); end fclose(subfid); fclose(fid); edit data.txt edit subdata1.txt edit subdata2.txt
Note : il est tout à fait possible de mixer cette solution avec TEXTSCAN comme l'a mentionné rostomus, afin d'écrire les nouveaux fichiers par morceaux de plusieurs lignes plutôt que ligne par ligne.
Partager