Copier coller une colonne excel d'un fichier a un autre
Résolu/Fermé
A voir également:
- Copier coller une colonne excel d'un fichier a un autre
- Déplacer une colonne excel - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Formule somme excel colonne - Guide
5 réponses
Utilisateur anonyme
Modifié le 27 déc. 2018 à 17:10
Modifié le 27 déc. 2018 à 17:10
Bonjour
Un fichier csv n’est pas un fichier excel, le format existant avant excel.
D’ailleurs à l’époque, il n’y avait que la virgule comme séparateur, le point virgule a été introduit ensuite.
Puisque tu veux juste extraire une colonne pour la mettre dans un fichier vierge, pas la peine d’crire un parser complet.
Je te montres de tête ( y a p’tet une faute de frappre par ci par là),
On va dire que tu veux la 3eme colonne (index 2)
Un fichier csv n’est pas un fichier excel, le format existant avant excel.
D’ailleurs à l’époque, il n’y avait que la virgule comme séparateur, le point virgule a été introduit ensuite.
Puisque tu veux juste extraire une colonne pour la mettre dans un fichier vierge, pas la peine d’crire un parser complet.
Je te montres de tête ( y a p’tet une faute de frappre par ci par là),
On va dire que tu veux la 3eme colonne (index 2)
IEnnumerable<string> colonne; colonne = (from l in File.ReadAllLines(“fichierSource.csv”) let valeurs = l.Split(“;”) select valeurs[2]); File.WriteAllLines(“fichierCible.csv”);
Utilisateur anonyme
28 déc. 2018 à 10:05
28 déc. 2018 à 10:05
Suite a mes recherche et au quelque indices que Whismeril ma laissé j'ai trouver une fonction assez simple a comprendre et vendu comme fonctionnant bien .
je rend a César ce qui appartient a César : https://code.i-harness.com/fr/q/509cb7
le code en lui même (adapter a mon code) :
ça a l'air de bien fonctionner chez les autres mais évidement pas chez moi .... (enfin presque)
ça fonctionne uniquement quand :
columnTarget.Add(splits['0']);
quand je remplace le 0 par autre-chose ça plante avec l'erreur suivante :
System.IndexOutOfRangeException : 'L'index se trouve en dehors des limites du tableau.'
c'est explicite et pourtant je trouve pas comment arranger çà ...
mon fichier et assez imposant mais même avec un petit je reste sur la même erreur
je rend a César ce qui appartient a César : https://code.i-harness.com/fr/q/509cb7
le code en lui même (adapter a mon code) :
private void coloneExtract(object sender, EventArgs e) { var columnTarget = new List<string>(); using (var rd = new StreamReader(Globals.TARGETPATH)) { while (!rd.EndOfStream) { var splits = rd.ReadLine().Split(';'); columnTarget.Add(splits['1']); } } foreach (var element in columnTarget) Console.WriteLine(element); }
ça a l'air de bien fonctionner chez les autres mais évidement pas chez moi .... (enfin presque)
ça fonctionne uniquement quand :
columnTarget.Add(splits['0']);
quand je remplace le 0 par autre-chose ça plante avec l'erreur suivante :
System.IndexOutOfRangeException : 'L'index se trouve en dehors des limites du tableau.'
c'est explicite et pourtant je trouve pas comment arranger çà ...
mon fichier et assez imposant mais même avec un petit je reste sur la même erreur
Utilisateur anonyme
28 déc. 2018 à 14:50
28 déc. 2018 à 14:50
Bon si tu trouves ce code plus simple, admettons.
S'il n'y a pas d'index 1, ça veut dire qu'il n'y a pas de texte après le ';'.
En gros si tu as ce type de texte
Maintenant si le texte est
Pour cette question,
Quand à
Là c'est du très simple et tu ne le comprends pas, parce que tu n'as pas acquis les bases.
Alors tu peux y arriver plus ou bien, plus ou moins efficacement (efficacité de codage, efficacité d'exécution etc...) et puis un jour ça va bloquer.
Le meilleur conseil que je puisse te donner est de mettre ton projet de coté quelques jours (entre 5 et 10 en moyenne), afin de suivre ce cours qui aborde toutes les bases.
https://tahe.developpez.com/dotnet/csharp/
Il ne fera pas de toi un codeur hors pair, mais il te donnera un socle de connaissance solide pour bien apprendre par la suite.
S'il n'y a pas d'index 1, ça veut dire qu'il n'y a pas de texte après le ';'.
En gros si tu as ce type de texte
"toto;titi;tata"
"toto;titi;tata".Split(';')va retourner une collection dont les 3 items sont
- toto
- titi
- tata
Maintenant si le texte est
"toto,titi tata", il n'y a pas de ; donc le split va retourner une collection, avec un seul élément qui est
"toto,titi tata", et pas d'index 1.
Pour cette question,
que signifie le 1 que l'on retrouve 2 fois ?c'est n'est pas un 1 c'est un L minuscule, j'aurais pu prendre ligne ou x ou patate, c'est une variable.
Quand à
je débute en c# donc pas mal de chose m’échappe encore., débuté n'est pas un problème, on y est tous passé, par contre mettre la charrue avant les boeufs, ce que font presque tous les autodidactes (moi y compris à l'époque) est une erreur.
Là c'est du très simple et tu ne le comprends pas, parce que tu n'as pas acquis les bases.
Alors tu peux y arriver plus ou bien, plus ou moins efficacement (efficacité de codage, efficacité d'exécution etc...) et puis un jour ça va bloquer.
Le meilleur conseil que je puisse te donner est de mettre ton projet de coté quelques jours (entre 5 et 10 en moyenne), afin de suivre ce cours qui aborde toutes les bases.
https://tahe.developpez.com/dotnet/csharp/
Il ne fera pas de toi un codeur hors pair, mais il te donnera un socle de connaissance solide pour bien apprendre par la suite.
j’apprécie ton aide Whismeril.
malheureusement je n'est pas tout ce temps devant moi pour développer le programme que l'on me demande.
j'apprend donc au fur et a mesure. le C# étant assez différent du C ou encore du Cpp avec lesquels je dev depuis maintenant 4 ans. je comprend que ce genre de question peut paraître futile ceci dit.
j'ai finalement trouver comment faire de mon coté, un peu également grâce a toi et ton premier exemple .
je dépose ma solution sous peu.
merci et bonne soirée
malheureusement je n'est pas tout ce temps devant moi pour développer le programme que l'on me demande.
j'apprend donc au fur et a mesure. le C# étant assez différent du C ou encore du Cpp avec lesquels je dev depuis maintenant 4 ans. je comprend que ce genre de question peut paraître futile ceci dit.
j'ai finalement trouver comment faire de mon coté, un peu également grâce a toi et ton premier exemple .
je dépose ma solution sous peu.
merci et bonne soirée
Utilisateur anonyme
28 déc. 2018 à 17:36
28 déc. 2018 à 17:36
voici comment j'ai résolut mon problème .
mon fichier.csv comprend de nombreuses lignes vide dans la colonne ciblé et c'est en partie pour ca que j'etait bloqué.
voici le bout de code :
voila tout.
merci de votre aide.
mon fichier.csv comprend de nombreuses lignes vide dans la colonne ciblé et c'est en partie pour ca que j'etait bloqué.
voici le bout de code :
private void colonneExtract(object sender, EventArgs e) { File.WriteAllText(Globals.NEWFILEPATH, string.Join(";\n", File.ReadAllLines(Globals.TARGETFILEPATH).Skip(1).Where(x => x.Split(';').Length > Globals.NUMCOLONNETARGET).Select(x => x.Split(';')[Globals.NUMCOLONNETARGET]))); }
voila tout.
merci de votre aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
28 déc. 2018 à 19:33
28 déc. 2018 à 19:33
Oui c'est très différent de C et C++, cela dit un split reste un split.
La question n'est pas futile, cela dit apprendre les bases reste la meilleure chose à faire quelque soit a discipline.
Puisque tu codes déjà en C et C++, et si en C++ tu codes objet, tu pourrais suivre le cours en 2 ou 3 jours.
Mais bon si t'as pas le temps.
Je me permet une remarque sur ta solution.
Tu as utilisé un WriteAllText, et fais un join de ";\n".
Puisque tu as une collection, WriteAllLine insère automatique "\r\n", si tu dois travailler sous windows c'est mieux.
Le fait de mettre un ; en fin de ligne crée une colonne vide, c'est voulu?
La question n'est pas futile, cela dit apprendre les bases reste la meilleure chose à faire quelque soit a discipline.
Puisque tu codes déjà en C et C++, et si en C++ tu codes objet, tu pourrais suivre le cours en 2 ou 3 jours.
Mais bon si t'as pas le temps.
Je me permet une remarque sur ta solution.
Tu as utilisé un WriteAllText, et fais un join de ";\n".
Puisque tu as une collection, WriteAllLine insère automatique "\r\n", si tu dois travailler sous windows c'est mieux.
Le fait de mettre un ; en fin de ligne crée une colonne vide, c'est voulu?
ce n'est pas l'envie d'apprendre qui manque. j'aime plutôt bien ça le c# mais je doit dev un petit logiciel pour une entreprise chez qui je suis en alternance 2j/semaine donc pas masse de temps pour me lancer sur des leçons. mais je progresse de plus en plus actuellement .
j'arrive a me débrouiller sans trop de difficulté, sauf quand ça deviens technique .
merci de ta remarque, je test cette modification asap.
j'arrive a me débrouiller sans trop de difficulté, sauf quand ça deviens technique .
merci de ta remarque, je test cette modification asap.
Modifié le 28 déc. 2018 à 08:49
j'essai de comprendre ton morceau de code ...
je débute en c# donc pas mal de chose m’échappe encore.
que signifie le 1 que l'on retrouve 2 fois ?