【问题标题】:Found Old D Code That Needs Update找到需要更新的旧 D 代码
【发布时间】:2018-07-07 06:04:55
【问题描述】:

在互联网上搜索可以让我从 Java 容器中提取声音文件的工具时,我发现了一段 4 年多前的 D 代码。不幸的是,我无法编译它,并在谷歌搜索时发现 std.stream 已被弃用。然而,我以前从未与 D 合作过,而且我找不到任何关于如何使这个 pre-stream-death 代码加快速度的明确想法。目前有没有 D 程序员可以帮助我?

编辑:我已经获取了 undead src 文件流和相关文件,但我现在遇到了 int 属性问题。根据我找到此代码的论坛,它在 4 年前发布时有效,所以我无法想象“files.sort”本质上是有问题的。

import std.stdio;
import std.file;
import std.conv;
import std.stream;
import std.bitmanip;

void main(string args[]){
    Stream pkfile = new BufferedFile(args[1],FileMode.In);

    int headersize;
    int counter = 0;
    int filecount;
    int throwaway;
    int offset;

    pkfile.read(headersize);
    pkfile.read(filecount);
    writefln("Count is : " ~ to!string(filecount));
    int[] files = new int[filecount];
    for(int x = 0; x < filecount; x++)
    {
        pkfile.read(throwaway);
        pkfile.read(offset);
        files[x] = offset + (headersize + 4);
    }

    files = files.sort;
    for(int x =0; x < filecount; x++)
    {
        pkfile.seekSet(cast(long)files[x]);
        long len;
        pkfile.read(len);
        int newlen = cast(int)len;
        ubyte[] ogg = new ubyte[newlen];
        pkfile.read(ogg);
        string outname = getcwd() ~"/"~ to!string(counter) ~ ".ogg";
        Stream oggout = new BufferedFile(outname,FileMode.OutNew);
        oggout.write(shiftL(ogg,newlen));
        oggout.close();
        writefln("Creating file " ~ to!string(counter) ~".ogg");
        counter++;
    }
}

ubyte[] shiftL(ubyte[] ogg,int ogglength){
    ubyte[] temp = new ubyte[ogglength];
    for(int x = 0;x < ogglength;x++){
        temp[x] = cast(byte)(ogg[x]-1);
    }
    return temp;
}

【问题讨论】:

  • 可以使用std.algorithm的排序(files.sort();)。
  • 我要为此导入 std.algorithm.sorting 吗?当我这样做并进行从 sort 到 sort() 的建议更改时,我收到错误“无法将 SortedRange!(int[], "a

标签: d dmd


【解决方案1】:

最简单的方法是获取std.stream 的副本。

但是对于重写,我会将整个文件读入内存,然后在您读取它的位时对其进行切片。

【讨论】:

  • 所以我得到了“std.stream and friends”,即 undead/internal/file.d、undead/utf.d 和 undead/doformat.d,但现在我得到了以下错误:extractor.d(27): Error: no property sort for type int[] 在发布代码的论坛上的评论表明它在发布时可以正常工作,所以我不敢说这是固有的线路问题。 sort 曾经是 int[] 的属性吗?
  • sort 曾经在所有数组上定义,但已替换为std.algorithm.sorting.sort
  • 那么我需要导入什么才能使 (27) 'files.sort' 或 'files.sort()' 工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多