Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB > Contribuez
Contribuez Proposez vos tutoriels, FAQ, sources, astuces MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/09/2011, 23h27   #1
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 905
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 905
Points : 15 878
Points : 15 878
Par défaut Déterminer le système d'exploitation sur lequel un fichier texte a été créé



voici une fonction qui permet de déterminer sur quel système d'exploitation un fichier texte a été crée.

Code :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
function [os,eolsiz] = ostxtfile(file)
%OSTXTFILE Find native OS for a text file
%   OS = OSTXTFILE(FILE) finds the operating system OS on which the file 
%   FILE was created. FILE is either a string with the full file path or an 
%   integer file identifier obtained from the fopen operation.
%
%   OS is one of the strings below :
%       'win'  => Windows
%       'unix' => Unix/Linux or Mac OS X (and +)
%       'mac'  => Mac up to version 9
%
%   [OS,EOLSIZ] = OSTXTFILE(...) returns the operating system OS and the 
%   number of characters EOLSIZ in the line terminator. EOLSIZ is 1 for 
%   Unix/Linux/Mac (CR or LF) and 2 for Windwows (CR+LF)
%
%   If the file is empty or contains only one line with no line terminator, 
%   then OS is an empty string and EOLSIZ is 0.
%

% Author  : Jerome Briot (Dut)
% Contact : dutmatlab#yahoo#fr
% Profil  : www.mathworks.com/matlabcentral/newsreader/author/94805
%           www.developpez.net/forums/u125006/dut/
%
% Version : 0.0 - 12 Nov 2008
%           0.1 - 05 Aug 2009 - OS returned as string char 
%           1.0 - 06-Sep-2011 - Major update
%

% MATLAB : 7.8.0.347 (R2009a)
% System : Windows XP SP3
%

% Check input arguments number
error(nargchk(1,1,nargin));

if isnumeric(file) % File identifier
    
    filename = fopen(file);
    if isempty(filename)
        error('First argument is not a valid file identifier')
    end
    
    pos = ftell(file);
    if pos~=0
        frewind(file);
        [str,eol] = fgets(file);
        fseek(file, pos, 'bof');
    else
        [str,eol] = fgets(file);
        frewind(file);
    end
    
else % File name in a string

    if exist(file,'file')~=2
        error('The file doesn''t exist');
    end
    
    fid = fopen(file,'r');
        if fid == -1
            error('Can''t open %s',file);
        end
        [str,eol] = fgets(fid);
    fclose(fid);

end

if isempty(eol)
    os = '';
    eolsiz = 0;
    warning('WarnLinTerm:NotFound','Line terminator not found\nUnable to check line terminator');
    return
end

if eol == 13 % CR \r
    os = 'mac'; % Mac
    eolsiz = 1;
elseif all(eol==[13 10]) % CRLF \r\n
    os = 'win'; % Windows
    eolsiz = 2;
elseif eol == 10 % LF \n
    os = 'unix'; % Unix
    eolsiz = 1;
end
La fonction prend en entrée, soit un nom de fichier (avec le chemin complet), soit un identifiant valide comme celui renvoyé par la fonction FOPEN.

En sortie, la fonction retourne une chaine de caractère spécifiant le système d'exploitation parmi la liste suivante :
  • 'win' => Windows
  • 'unix' => Unix/Linux ou Mac OS X (et +)
  • 'mac' => Mac jusqu'à la version 9

Elle peut également retourner, en second argument de sortie, le nombre de caractères représentant la fin d'une ligne.

Si le fichier est vide ou ne contient qu'une seule ligne, la fonction renvoie une chaine de caractères vide pour le système d'exploitation et 0 pour le nombre de caractères représentant la fin d'une ligne.

Si des utilisateurs Mac pouvaient me confirmer que cette fonction retourne la bonne valeur sur leur machine, je leur en serais reconnaissant.

__________________
Mes contributions MATLAB (R2009a - Windows & Linux)

• J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck)
• Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel)

• Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 10h39   #2
Modérateur
 
Inscription : août 2007
Messages : 3 576
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 3 576
Points : 4 397
Points : 4 397


J'ai testé sur un mac et ça me renvoie 'unix', ce qui est logique puisque osx est basé sur un système unix. Es-tu sûr que certains mac utilisent CR comme caractère de nouvelle ligne? D'après wikipedia, osx utilise LF comme les autres systèmes UNIX.
__________________
Pour une bonne utilisation des balises code c'est ici!
Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


La nature est un livre écrit en langage mathématique. Galilée.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 10h57   #3
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 905
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 905
Points : 15 878
Points : 15 878
Citation:
Envoyé par magelan Voir le message
J'ai testé sur un mac et ça me renvoie 'unix', ce qui est logique puisque osx est basé sur un système unix.
Je sais mais j'ai appris à me méfier de ce qui est logique en informatique.

De toute façon, le but du code est d'identifier le type de fichier.

Donc même si Mac OS X commence à dater, il est normale que le code retourne 'mac' pour des (très) vieux fichiers.

Je modifie l'entête du fichier

__________________
Mes contributions MATLAB (R2009a - Windows & Linux)

• J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck)
• Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel)

• Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h10.


 
 
 
 
Partenaires

Hébergement Web