0

この質問は、この前の質問を修正したものです。

ubyte[]を指定されたエンコーディングにデコードする方法は?

ubyte[]属性から返された配列std.zip.ArchiveMember.expandedDataを文字列またはその他の範囲指定可能な文字列のコレクションに変換する慣用的な方法を探しています...内容全体が呼び出しFile.open("file")に似ているか、同様の方法で反復可能なものFile.open("file").byLine()です。

これまでのところ、文字配列または文字列を扱う標準ドキュメントから見つけたものはすべて引数を認めていませんubyte[].Dのzipファイル処理に関する例は非常に初歩的で、zipアーカイブとそのメンバーファイルから生データを取得することのみを扱っています. ...生のバイトストリームとテキスト指向のファイル/文字列操作の間で簡単に階層化できる明確なファイル/ストリーム/ioインターフェイスはありません。

個々のコードポイントで何かを見つけstd.utfたりstd.uni、デコードしたり、バイトストリームを while/for ループしたりできると思いますが、もっと良い方法があるのではないでしょうか?

コードサンプル:

std.zip.ZipArchive zipFile;
// just humor me, this is what I've been given.
zipFile = new std.zip.ZipArchive("dataSet.csv.zip");
foreach(memberFile; zipFile.directory)
{
    zipFile.expand(memberFile);
    ubyte[] uByteArray = memberFile.expandedData;

    // ok, now what?
    // is there a relatively simplistic way to get this
    // decoded/translated byteStream into a string
    // or collection of strings(for example, one string per line
    // of the compressed file) ?

    string completeCsvContents = uByteArray.PQR();
    string[] csvRows = uByteArray.XYZ();
}

PQR または XYZ に簡単に入力できるものはありますか?

または、次のスタイルで API 呼び出しを行うことが問題である場合

string csvData = std.ABC.PQR(uByteArray)

ABC/PQR とは?

4

2 に答える 2

1

多分ただする

auto stuff = cast(char[]) memberFile.expandedData; 

結果を使用する場合char[] stuff、たとえば、これchar[] stuffを入力範囲として渡すときに範囲プリミティブを呼び出す関数によって、とにかく自動デコードされます。

実際にはどちらもデコードされていないためchar[]ですstringdchar[]またはのみdstringです。

于 2015-12-19T10:44:25.703 に答える