2010-12-02 34 views
1

J'ai un fichier CSV avec 48 lignes d'entiers. J'utilise la fonction openfiledialog de visual C# pour permettre à un utilisateur de sélectionner ce fichier. Je veux ensuite que le programme tronque ce fichier à 24 lignes. Y at-il une fonction tronquée que je peux utiliser pour le faire facilement? Sinon, comment puis-je y aller? Voici ce que j'ai jusqu'à présent ...Tronquer le fichier CSV en C#

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace sts_converter 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void select_Click(object sender, EventArgs e) 
     { 
      int size = -1; 
      DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog. 
      if (result == DialogResult.OK) // Test result. 
      { 
       string file = openFileDialog1.FileName; 
       try 
       { 
        string text = File.ReadAllText(file); 
        size = text.Length; 
       } 
       catch (IOException) 
       { 
       } 
      } 
      Console.WriteLine(size); // <-- Shows file size in debugging mode. 
      Console.WriteLine(result); // <-- For debugging use only. 
     } 

    } 
} 
+0

+1 Bonne question, puisque je l'ai trouvé/appris une utilisation pour la méthode 'Take' Linq. –

Répondre

1
  • Appel ReadAllLines pour obtenir un tableau de 48 chaînes
  • Créer une nouvelle série de 24 chaînes
  • Utilisez Array.Copy pour copier les chaînes que vous voulez
  • Appel WriteAllLines pour écrire le nouveau tableau dans le fichier

(Vous pouvez également utiliser LINQ de Take méthode)

+0

+1 C'est l'algorithme que j'utiliserais moi-même. –

5

Il pourrait être aussi facile que:

string file = openFileDialog1.FileName; 
File.WriteAllLines(
    file, 
    File.ReadLines(file).Take(28).ToArray() 
); 
+1

+1 C'est presque aussi simple que 1, 2, 3! = P –

+0

+ 1 utilisant le style de codage déclaratif est toujours plus élégant et direct. –

+0

Facile, mais pas productif - il lit toutes les lignes de la mémoire, et seulement alors prend 28. Essayez d'imaginer s'il y a 100000 lignes. Et alors? Mieux vaut charger ligne par ligne (utilisez stream = File.OpenText (...) puis stream.ReadLine()) et arrêtez simplement la boucle après 28 itérations. – Genius