Des Alternatives pour une meilleure lecture et analyse de fichiers texte à l'aide .NET

StackOverflow https://stackoverflow.com/questions/34182

  •  09-06-2019
  •  | 
  •  

Question

J'ai besoin de lire à partir d'une variété de différents fichiers de texte (j'ai certains fichiers délimités et certains de largeur fixe de fichiers).J'ai examiné l'analyse de la fichiers ligne par ligne (lent en utilisant le Fichier.ReadLine type de méthodes) et de lire le fichier à l'aide de ODBC pilote de texte (plus rapide), mais quelqu'un aurait-il une autre (mieux) des suggestions?Je suis en utilisant .NET/C#.

Était-ce utile?

La solution 3

Pour répondre à ma propre question:

J'ai fini à l'aide de Microsoft.VisualBasic.FileIO.TextFieldParser objet, voir:

http://msdn.microsoft.com/en-us/library/f68t4563.aspx

(exemple de mise en œuvre ici)

Cela me permet de gérer les fichiers csv sans se soucier de la façon de composer avec le fait que les champs sont entourés de guillemets, contiennent des virgules, échappé des citations etc.

Autres conseils

Je ne suis pas sûr que vous pourriez vraiment faire un texte et Excel analyseur de fichier, pas moins par fichier Excel vous dire une virgule/pipe/fichier délimité par des tabulations, qui est en fait juste un autre fichier texte.La lecture réelle des fichiers excel nécessitent l'utilisation de la suite MS Office des bibliothèques.

Pour un fichier texte délimité par l'analyse, on peut le voir dans FileHelpers -- open source et ils joli beaucoup ont couvert.Vous ne savez pas si elle correspond à vos exigences en matière de vitesse mais.

En ignorant la partie Excel (dont vous dites qu'il n'est pas important):

J'ai trouvé LINQ to être assez utile dans l'analyse des fichiers txt (pipe-virgules ou csv)

par exempleIl lit un tuyau de fichier délimité par le saut de l'hader ligne et crée un IEnumerable comme le résultat:

var dossiers = à partir d'une ligne dans le Fichier.ReadAllLines(@"c:\blah.txt").Sauter(1) laissez pièces = ligne.Split('|') sélectionner des parties;

Si les fichiers sont de taille relativement petite, vous pouvez utiliser le Fichier classe.Il a de ces méthodes qui peuvent vous aider à:

  • ReadAllBytes
  • ReadAllLines
  • ReadAllText

Votre question est un peu vague.Je suppose que les fichiers texte contenant des données structurées, non seulement aléatoire de lignes de texte.

Si vous analysez les fichiers vous-même ensuite .NET est une fonction de la bibliothèque pour lire toutes les lignes d'un fichier texte dans un tableau de chaînes de caractères (Fichier.ReadAllLines).Si vous savez que vos fichiers sont assez petit pour tenir dans la mémoire, alors vous pouvez utiliser cette méthode et de parcourir le tableau à l'aide d'une expression régulière pour valider et extraire les champs.

Les fichiers Excel sont un autre jeu de ballon..XLS fichiers sont binaires, pas de texte, de sorte que vous devez utiliser une 3ème partie de la bibliothèque pour y accéder..XLSX fichiers à partir d'Excel 2007 contiennent comprimé de données XML, donc une fois de plus vous devez décompresser le XML puis utiliser un analyseur XML pour obtenir les données.Je ne recommanderais pas d'écrire votre propre parseur XML, sauf si vous en sentez le besoin de l'exercice intellectuel.

Je suis d'accord avec John,

Par exemple:-

using System.IO;

...

public class Program {
  public static void Main() {
    foreach(string s in File.ReadAllLines(@"c:\foo\bar\something.txt") {
      // Do something with each line...
    }
  }
}

Le Fichier de processus de lecture n'est pas lent si vous avez lu tout le fichier à la fois en utilisant le Fichier de classe et les méthodes proposées par Jean.Selon la taille du fichier et de ce que vous voulez faire avec eux, il peut utiliser plus ou moins de mémoire.Je vous suggère de commencer avec un Fichier.ReadAllText (ou tout ce qui est approprié pour vous)

Concernant la lecture des Fichiers XLS:

Si vous disposez de Microsoft Office XP et au-dessus, vous avez accès à la déjà inclus .NET SDK Bureau des Bibliothèques, où vous pouvez "nativement" lire les fichiers XLS, Word, PPT, etc.Veuillez noter qu'en vertu de Office XP, vous devez vérifier manuellement que lors de l'installation (sauf si vous avez eu .NET déjà installée).

Je ne sais pas si ces bibliothèques sont disponibles en tant que module séparé si vous n'avez pas Microsoft Office.

Pour une raison obscure, l'ensemble de ces bibliothèques (y compris les dernières versions de Office 2007.k.un.:Office 12), sont des composants COM un la douleur pour l'utilisation, la cause laid dépendances et sont pas rétro-compatible.I. E.:si vous avez quelques méthodes qui fonctionnent avec Office XP (Office11), et vous l'installer que sur un client de Bureau de 12, il ne fonctionne pas, parce que certaines interfaces où ils ont changé.Si vous avez besoin de maintenir deux les "bibliothèques" et des méthodes pour faire face à cela.Le même est vrai si l'utilisation d'Office 12 bibliothèques de programme, et vous client de Bureau 11.Vos bibliothèques ne fonctionnent pas.:S

Je ne sais pas pourquoi Microsoft n'a jamais créé un Microsoft.Bureau de.XXXX bibliothèque gérée (wrapper) autour de ces choses laides.

De toute façon, votre question est tout à fait étrange, essayez de suivre quelques conseils ici.Bonne chance!

Le texte ODBC pilote est maintenant plutôt par jour - il n'a pas de support de l'Unicode.

Étonnamment MS Excel utilise toujours, donc si vous ouvert Unicode CSV dans Excel 2007 (plutôt que de l'importer), vous perdez tous les non-ASCII caractères.

Vous meilleur pari est d'utiliser .Net fichier les méthodes de lecture, comme d'autres l'ont suggéré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top