Pergunta

Em Java há uma classe agradável chamado Scanner para leitura de cordas e correntes de um determinado formato de data-estruturas como inteiros, floats, ... Existe algum equivalente em Mono? Em .Net há um binário-reader, mas ele lê os dados como binários. Eu quero uma classe que ler os dados por analisá-lo a partir de uma string.

EDIT: reação nas respostas atuais, eu sei que a maioria dos dados-tipos têm um-método de análise, mas o problema com estes são, eles não ler a cadeia sequencialmente. Em Java você simplesmente inicializar o objeto, e pela ativação de métodos, você ler sequencialmente os tipos de dados.

Foi útil?

Solução

Bem, desde que você está lendo um arquivo em para casos de teste, eu estou indo supor que você sabe o formato exato dos dados que entram e como ela precisa ser analisado. Olhando para classe Parser de Java na documentação faz com que pareça muito complicado ou muito mais do que uma classe de conveniência. Parece apenas tokenizar a string de fluxo em espaços e fornecer funções para tirar o token e analisá-lo. E, tanto quanto eu sei, Net não tem uma classe equivalente. Então, se você quer um para reutilização, então você precisa escrever um você mesmo.

Mas o algoritmo básico que você precisa é de ler o conteúdo do arquivo, dividir as fichas, e analisá-los. Se o arquivo é razoável tamanho, você poderia usar File.ReadAllLines() que lê o conteúdo da linha-a-linha arquivo em um String[]. Ou você pode usar uma classe StreamReader para ler as linhas de um de cada vez usando seu ReadLine(). Então, depois de tê-los em uma linha, você tokenizar-los com String de Split(), e depois analisá-los.

Sem saber exatamente como você precisa usar os valores no arquivo, um padrão muito básico poderia ser:

// Read in the whole file
String[] strLines = File.ReadAllLines(strFilePath);

// Loop through each of the lines to process their contents
foreach (String strLine in strLines) {
    // Tokenize on the spaces
    String[] strTokens = strLine.Split(' ');

    // Parse the values
    int iIntValue = Int.Parse(strTokens[0]);
    double dDoubleValue = Double.Parse(strTokens[1]);

    // Do something with the values
}

Criar o seu próprio classe Parser lhe permitiria manter os tokens estaduais e avanço automático como você usá-los. Se você ir por esse caminho, o StreamReader pode ser a melhor opção.

Outras dicas

A maioria dos tipos de dados básicos terá um .Parse e .TryParse() métodos que vão fazer isso por você.

Por exemplo, o método Int32.TryParse .

Em .NET, muitos do tipo têm métodos .Parse() e .TryParse() estáticos que leva um parâmetro de cadeia.

Você poderia fazer algo como:

Stream s = new Stream();
// Wire up the stream.

StreamReader reader = new StreamReader(s);
String value = reader.ReadToEnd();

int valueAsInt = Int32.TryParse(value);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top