OVH Cloud OVH Cloud

Fichier Windows et matériel Linux

294 réponses
Avatar
nom
Bonjour,

A supposer qu'une entreprise veuille mettre son parc sous Linux.
Et qu'elle reçoive des documents venant d'Access, Excel,... peut-elle
les lire , les travailler et les renvoyer de manière que le
destinantaire sur produits Microsoft puisse les lire, etc...
?


Merci

10 réponses

Avatar
george
JKB , dans le message , a
écrit :
Et alors ? Ca prouve justement qu'il y a une différence
_fondamentale_ entre un tableau et une simple fonction
échantillonnée fut-ce sur les entiers positifs.


Ça c'est très fort ! Question mauvaise foi, on fait difficilement
mieux : un tableau et une fonction c'est fondamentalement différent
puisque l'un peut être remplacé par l'autre.

Bon, j'en ai marre de répondre à des arguments aussi médiocres.

Avatar
Richard Delorme
Le 30-06-2004, à propos de
Re: Fichier Windows et matériel Linux,
Nicolas George écrivait dans fr.comp.os.linux.debats :

JKB , dans le message , a

Non, ou alors on n'a pas lu la même norme. Il est écrit dans la
norme ANSI que c[3][3] déclarait un tableau de 3 lignes et 3
colonnes, que les élements étaient accessibles directement, mais
_jamais_ quelle était la structure en mémoire de l'objet.


Cette norme évite la redondance, elle ne répète pas ce qu'elle a déjà
dit par ailleurs. En l'occurence, il est spécifié dans le chapitre
parlant des tableaux en général qu' un tableau est la juxtaposition (au
sens de l'arithmétique des pointeurs) des objets qui le composent. Ça
suffit pour lever l'ambiguïté.



Non. Cela ne suffit pas car la norme (ANSI) est assez floue sur ce
point particulier (et sur d'autres d'ailleurs). Au passage, la norme
n'impose même pas de pouvoir utiliser un pointeur sur le tableau en
question. Si vous déclarez c[3][3], la seule façon d'utiliser ce
tableau est d'y accéder par c[i][j]. *c peut tout à fait être
invalide (si le tableau statique est créé dans la pile au hasard sur
processeur Sparc), même si dans la grande majorité des cas, ça passe
(et je ne parle pas de **c voire de c[3*i+j], ce dernier type d'accès étant
autorisé dans la norme ANSI sur ce type de déclaration de tableau).


Non. c[i] est équivalent à *(c + i), et donc *c à c[0], ce qui fait que
*c a pour type un tableau de 3 int et non un des éléments du tableau
bidimensionnel. **c est équivalent à c[0][0], c[3*i+j] invoque un
comportement indéfini si 3*i+j dépasse 3, sinon il s'agit d'un tableau
de 3 int et non d'un élément du tableau bidimensionnel.

Par exemple :
#include <stdio.h>

int main(void) {
int c[3][3];

c[0][0] = 7;
c[1][2] = 4;
c[2][1] = 42;

printf("%dn", **c);
printf("%dn", *((*(c+1))+2));
printf("%dn", 1[c[2]]);

return 0;
}

Affiche :
7
4
42

sans utiliser l'écriture c[i][j] et sans invoquer aucun comportement
indéfini.


--
Richard



Avatar
Manuel Leclerc


Oui, mais peux-tu m'expliquer le rapport entre
ta question et ma question ?


Simplement que je vois plein de cas où l'ajustement
est inutile (soit parce que l'information n'est plus
nécessaire, soit parce qu'on va pouvoir le faire plus
tard avec une information qu'on a par ailleurs),


Si on gère les chaînes avec un type ad-hoc du genre
structure avec un pointeur et une taille, la mise
à jour de la taille n'est ni PLUS, ni MOINS nécessaire
que la préservation du zéro binaire en fin de chaîne
dans la gestion classique. Je ne comprends pas
l'argument "plein de cas". Il faudrait un exemple.

que ça me saute aux yeux, et que je pensais que ça
sauterait aux yeux de n'importe qui assez familier du C.


Ben non.


Avatar
remy
"Nicolas George" a écrit dans le message de news:
cbu4sg$120i$
"remy" , dans le message <cbtrd4$fs1$, a
cela cree une liste chaine de pointeur sur la structure de depart


Ce n'est pas le cas.
exact



import java.awt.*;
public class test
{
public static void main(String args[])throws Exception
{
String t0=new String("123");
String t1=new String("456");
String t2=new String();
t2=t2+t0;
t2=t2+t1;
System.out.println(t2);
t1.concat("789");
System.out.println(t2);

StringBuffer b0=new StringBuffer("123");
StringBuffer b1=new StringBuffer("456");
StringBuffer b2=new StringBuffer();

b2².append(b0);
b2².append(b1);
System.out.println(b2);
b1.append("789");
System.out.println(b2);
}
}


mais ce n'est pas tres grave cela peut s'arranger

import java.awt.*;
import java.util.*;

public class test2
{
public static void main(String args[])throws Exception
{
MyString t0=new MyString("123");
MyString t1=new MyString("456");
MyString t2=new MyString();
t2.plus(t0.toString());
t2.plus(t1.toString());
System.out.println(t2);
t2.plus("789");
System.out.println(t2);

}
}

class MyString
{
Vector v;
MyString(){this.v=new Vector();}

MyString(String s)
{
this.v=new Vector();
v.addElement(s);
}

public void plus(String s)
{
v.addElement(s);
}
public String toString()
{
String s=new String();
for(int i=0;i<v.size();i++)
{
s=s+(String)v.elementAt(i);
}
return s;
}
}


et franchement les quelques milli secondes que je perds ou que je gagne
ne me pertube pas si je veux un code qui bouste je ne prends pas java


En l'occurence, ça peut être plusieurs minutes, plusieurs heures, selon
comment c'est utilisé.



Avatar
JKB
Le 30-06-2004, à propos de
Re: Fichier Windows et matériel Linux,
Nicolas George écrivait dans fr.comp.os.linux.debats :
JKB , dans le message , a
écrit :
Et alors ? Ca prouve justement qu'il y a une différence
_fondamentale_ entre un tableau et une simple fonction
échantillonnée fut-ce sur les entiers positifs.


Ça c'est très fort ! Question mauvaise foi, on fait difficilement
mieux : un tableau et une fonction c'est fondamentalement différent
puisque l'un peut être remplacé par l'autre.

Bon, j'en ai marre de répondre à des arguments aussi médiocres.


Moi aussi ;-) Je ne sais pas ce que vous faites dans la vie, mais si
vous êtes prof de maths, j'espère simplement que vous ne dites pas
cela à vos élèves. Maintenant, si vous êtes trop obtus ou si vous
avez trop d'égo pour comprendre qu'un vecteur n'est pas qu'une
simple fonction échantillonnée sur les entiers, et que
sémantiquement parlant cela ne _peut_ pas être traité de la même
façon même si le résultat est le même, je ne puis rien pour vous.
Je ne répondrai plus à ce genre de débat avec vous.

Allez, je vous donne une dernière piste : un vecteur est un objet
_algébrique_, une fonction, un objet _analytique_. Je ne sais pas
bien si vous percevez la différence entre ces deux concepts car j'ai
l'impression pour vous qu'un vecteur n'est que la tabulation d'une
fonction. Je comprends mieux maintenant le mélange des concepts que
font certains de mes étudiants.

JKB


Avatar
george
JKB , dans le message , a
écrit :
Moi aussi ;-) Je ne sais pas ce que vous faites dans la vie, mais si
vous êtes prof de maths, j'espère simplement que vous ne dites pas
cela à vos élèves.


Je ne considère pas les contributeurs de ce groupe comme mes élèves.

sémantiquement parlant cela ne _peut_ pas être traité de la même
façon


D'une part c'est faux, d'autre part on parlait de syntaxe. Bref,
doublement perdu.

Avatar
JKB
Le 30-06-2004, à propos de
Re: Fichier Windows et matériel Linux,
Richard Delorme écrivait dans fr.comp.os.linux.debats :
Par exemple :
#include <stdio.h>

int main(void) {
int c[3][3];

c[0][0] = 7;
c[1][2] = 4;
c[2][1] = 42;

printf("%dn", **c);
printf("%dn", *((*(c+1))+2));
printf("%dn", 1[c[2]]);

return 0;
}

Affiche :
7
4
42

sans utiliser l'écriture c[i][j] et sans invoquer aucun comportement
indéfini.


D'accord. Vous me réessayez ça avec le compilo Sun de Solaris 2.5
qui suit la norme lui-aussi si on lui met l'option ANSI et on en reparle
si vous le voulez-bien.

Maintenant, je suis entièrement d'accord avec vous, et votre syntaxe
passe sur la plupart des systèmes, mais pas tous, car la gestion
mémoire des tableaux dépend en partie de l'implantation (alignement
et gestion des variables locales).

JKB

Avatar
JKB
Le 30-06-2004, à propos de
Re: Fichier Windows et matériel Linux,
Nicolas George écrivait dans fr.comp.os.linux.debats :
JKB , dans le message , a
écrit :
sémantiquement parlant cela ne _peut_ pas être traité de la même
façon


D'une part c'est faux, d'autre part on parlait de syntaxe. Bref,
doublement perdu.


On parlait du sens qu'il y avait derrière la syntaxe et du fait que
le traitement d'un vecteur n'est pas le traitement d'une fonction.
Ni plus, ni moins, mais avec votre manie de couper les discussions,
on n'arrive plus à suivre.

JKB


Avatar
george
JKB , dans le message , a
écrit :
On parlait du sens qu'il y avait derrière la syntaxe et du fait que
le traitement d'un vecteur n'est pas le traitement d'une fonction.


Non, on parlait du fait que g(x) pouvait s'interpréter comme g(x) ou
comme g(x). Effectivement, c'est dramatiquement différent.

Avatar
Richard Delorme
Le 30-06-2004, à propos de
Re: Fichier Windows et matériel Linux,
Richard Delorme écrivait dans fr.comp.os.linux.debats :

Par exemple :
#include <stdio.h>

int main(void) {
int c[3][3];

c[0][0] = 7;
c[1][2] = 4;
c[2][1] = 42;

printf("%dn", **c);
printf("%dn", *((*(c+1))+2));
printf("%dn", 1[c[2]]);

return 0;
}

Affiche :
7
4
42

sans utiliser l'écriture c[i][j] et sans invoquer aucun comportement
indéfini.



D'accord. Vous me réessayez ça avec le compilo Sun de Solaris 2.5
qui suit la norme lui-aussi si on lui met l'option ANSI et on en reparle
si vous le voulez-bien.


Dans ce cas, c'est que le compilateur n'est pas conforme à la norme.

--
Richard