Leia os dados do arquivo de texto

In C++, istream& operator>> can be used to read data "as in text". What is the equivalent in D?

Minha tentativa:

input.txt

c 1033
90.432

input_test.d

import std.stdio;
import std.stream;

void main()
{
    auto inputFile = new BufferedFile("input.txt");
    char c;
    int i;
    double d;

    inputFile.read(c);
    inputFile.read(i);
    inputFile.read(d);
    writeln(c, '\t', i, '\t', d);
}

Saída

c   858796320   4.90559e-62
1
adicionado editado
Visualizações: 1
BTW, eu acho que o código que faz é lido em um char, int e double em forma binária . Ou seja, a primeira leitura obtém um byte, o segundo engole 4 bytes e o último 8 e interpreta cada seqüência de bits como o tipo relacionado.
adicionado o autor BCS, fonte

1 Respostas

D tem muitas maneiras de ler dados de arquivos para tornar vários casos de uso convenientes. Aqui estão alguns:

Com base no seu caso específico, você provavelmente vai querer usar slurp ou readf . Sua outra opção é ler as linhas e dividi-las nos campos desejados e, em seguida, usar std.conv.to para analisar a representação textual:

double d = to!double(somestring);

Em resumo, se cada linha tiver o mesmo formato, o slurp é o melhor caminho a percorrer. Caso contrário, você terá que decidir o que será mais conveniente para você.

4
adicionado
A saída não é o que eu quero. O int e o double estão incorretos. De volta às suas sugestões, suponha que eu use byLine . Eu deveria então usar splitter e os utilitários std.conv ?
adicionado o autor catfish_deluxe_call_me_cd, fonte
Eu tentei readf , mas algo deu errado (também sou novo na sintaxe de formato). Obrigado pela sugestão do slurp , eu não sabia disso.
adicionado o autor catfish_deluxe_call_me_cd, fonte
Eu atualizei minha resposta. Eu gosto muito de slurp, mas se o formato varia de linha para linha, você provavelmente precisará dividir manualmente e converter as partes.
adicionado o autor Justin W, fonte