Pergunta

Eu preciso ler a partir de uma variedade de diferentes arquivos de texto (eu tenho alguns arquivos delimitados e alguns de largura fixa arquivos).Eu pensei em analisar os arquivos linha a linha (lenta usando o Arquivo.ReadLine tipo de métodos) e a leitura do arquivo usando o driver ODBC de texto (mais rápido), mas alguém tem alguma outra (melhor) sugestões?Eu estou usando .NET/C#.

Foi útil?

Solução 3

Respondendo a minha própria pergunta:

Eu acabei usando o Microsoft.VisualBasic.FileIO.TextFieldParser objeto, veja:

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

(exemplo de implementação aqui)

Isso me permite manipular arquivos csv sem se preocupar sobre como lidar com o fato campos são colocados entre aspas, contêm vírgulas, escapou de citações etc.

Outras dicas

Eu não tenho certeza de que você pode realmente fazer um texto e Excel analisador de ficheiros, a não ser que por arquivo Excel que você quer dizer uma vírgula/pipe/guia arquivo delimitado, que é, na verdade, outro arquivo de texto.A leitura real do excel arquivos exigem que você use o MS Office bibliotecas.

Para arquivo de texto delimitado de análise, você pode olhar para FileHelpers -- código-fonte aberto e muito tê-lo coberto.Não tenho certeza se ele vai se adequar a sua velocidade requisitos embora.

Ignorando o Excel parte (o que você diz não é importante):

Eu encontrei o LINQ para ser bastante útil na análise de arquivos txt (pipe ou delimitado csv)

exemplo:Esta lê um tubo de arquivo delimitado por ignorar o hader linha e cria um IEnumerable como o resultado:

var registros = a partir de linha no Arquivo.ReadAllLines(@"c:\blah.txt").Skip(1) deixe peças = linha.Split('|') selecione as peças;

Se os arquivos são relativamente pequenas, você pode usar o Arquivo de classe.Ele tem estes métodos que podem ajudar você:

  • ReadAllBytes
  • ReadAllLines
  • ReadAllText

Sua pergunta é um pouco vaga.Eu suponho que os arquivos de texto contêm dados estruturados, não apenas aleatória de linhas de texto.

Se estiver a analisar os ficheiros em si mesmo, então .NET tem uma função de biblioteca para ler todas as linhas de um arquivo de texto em uma matriz de seqüências de caracteres (Ficheiro.ReadAllLines).Se você sabe que seus arquivos são pequenos o suficiente para armazenar na memória, então você pode usar este método e iterar sobre a matriz usando uma expressão regular para validar e extrair os campos.

Arquivos do Excel são um diferente jogo de bola..Os arquivos XLS são binário, e não em texto, então você precisa usar uma festa de 3 biblioteca para acessá-los..Arquivos XLSX do Excel 2007 contém comprimidos de dados XML, assim, mais uma vez você precisará descompactar o XML, em seguida, usar um parser XML para obter os dados.Eu não recomendaria a escrever o seu próprio parser de XML, a menos que você achar necessário para o exercício intelectual.

Concordo com o João,

Por exemplo:-

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...
    }
  }
}

O Ficheiro processo de leitura não é lento, se você ler todo o arquivo de uma só vez usando o Arquivo de classe e os métodos sugeridos por João.Dependendo do tamanho do arquivo e o que você pretende fazer com eles, ele pode usar mais ou menos de memória.Eu sugiro que você tente com o Arquivo.ReadAllText (ou qualquer que seja adequado para você)

Sobre a leitura de Arquivos XLS:

Se você tiver o Microsoft Office XP e superior, você tem acesso aos já incluídos .LÍQUIDO do SDK de Office Bibliotecas, onde você pode "nativamente" ler arquivos XLS, Word, PPT, etc.Por favor, note que no Office XP você tenha de verificar manualmente se durante a instalação (a menos que você tinha .NET instalado anteriormente).

Eu não sei se essas bibliotecas estão disponíveis como um pacote separado se você não tiver o Microsoft Office.

Por alguma obscura razão, todas essas bibliotecas (incluindo as versões mais recentes do Office de 2007.k.uma.:Office 12), são os componentes COM um dor para usar, feia da causa dependências e são não para trás compatível.I. E.:se você tem alguns métodos que funcionam com o Office XP (Office11) e instalar o que para um cliente com o Office 12 não funciona, porque algumas interfaces de onde se mudou.Então você precisa para manter dois conjunto de "bibliotecas" e de métodos para lidar com isso.O mesmo se aplica se usar o Office 12 bibliotecas para o programa, e você cliente tem o Office 11.Suas bibliotecas não funcionam.:S

Eu não sei por que a Microsoft nunca criou um Microsoft.Office.XXXX biblioteca gerenciada (wrapper) em torno dessas coisas feias.

De qualquer forma, a sua pergunta é muito estranho, tente siga alguns conselhos aqui.Boa sorte!

O controlador de texto ODBC é agora, em vez de data - que ele não tem suporte a Unicode.

Surpreendentemente, MS Excel ainda usa-lo, por isso, se você aberto uma Unicode CSV no Excel 2007 (em vez de importá-lo) você perder todos os não-caracteres ASCII.

Você melhor aposta é a de usar .Da rede de leitura de arquivo métodos, como outros têm sugerido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top