就像在其他语言中一样简单,我似乎无法在d编程语言中找到一个选项,我可以将字符串(例如:"234.32")转换为double/float/real.
使用std.c.stdio库中的atof仅在我使用常量字符串时才有效.(例如:atof("234.32")
有效,但atof(tokens[i]);
令牌是带有字符串的动态数组不起作用).
如何在d编程语言中将字符串转换或解析为real/double/float?
这是一个简单的程序,它从stdin读取行并将它们输出到stdout.
module test;
import std.stdio;
void main(string[] args)
{
foreach (int i, string line; lines(stdin)) {
writeln(line ~ " (test)");
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Windows DMD编译器v2.052.
如果我做 : type file.txt | test.exe
程序将"test"一词附加到file.txt的每一行,并将它们输出到控制台.
但是我最后得到一个错误:
std.stdio.StdioException@std\stdio.d(2138): Bad file descriptor
也许我错过了什么?它让我疯狂!:)
我下载gtkD-1.5.1
并解压缩到某个gtkD
目录.接下来我该怎么办?我不明白我是否必须编译并将其链接到某些lib或只是在我的代码中链接到它?
编辑:(@ dsimcha)
dsss build
gtkD主目录中的命令给了我这个:
Could not detect versions.
Could not detect versions.
Could not detect versions.
Could not detect versions.
Could not detect versions.
undemofy
Could not detect versions.
Could not detect versions.
atk => DO-atk
cairo => DO-cairo
gdk => DO-gdk
gdkpixbuf => DO-gdkpixbuf
gio => DO-gio
glade => DO-glade
glib => DO-glib
gobject => DO-gobject
gthread => DO-gthread
gtk => DO-gtk
gtkc => DO-gtkc
pango => DO-pango
Run Code Online (Sandbox Code Playgroud)
但是没有创建lib?
我试图按照D应用程序在各个地方给出的示例.通常在学习语言时,我会从示例应用程序开始并自行更改,纯粹是为了测试内容.
引起我注意的一个应用是计算传入的文本块中的单词的频率.由于字典是在关联数组中构建的(元素存储频率,键是单词本身),输出没有任何特定的顺序.因此,我尝试根据网站上给出的示例对数组进行排序.
无论如何,这个例子显示了一个lambda'排序!(...)(数组);' 但是当我尝试代码时,dmd将无法编译它.
这是简化的代码:
import std.stdio;
import std.string;
void main() {
uint[string] freqs;
freqs["the"] = 51;
freqs["programming"] = 3;
freqs["hello"] = 10;
freqs["world"] = 10;
/*...You get the point...*/
//This is the actual example given, but it doesn't
//seem to work, old D version???
//string[] words = array(freqs.keys);
//This seemed to work
string[] words = freqs.keys;
//Example given for how to sort the 'words' array based on
//external criteria (i.e. the frequency of the words from
//another array). This …
Run Code Online (Sandbox Code Playgroud) 我正在阅读Andrei Alexandrescu关于D编程语言的书.他是一位优秀的作家,在解释D语言方面做得非常出色.然而,当我无法想象ASM输出或某些关键字的后果(例如输入,输出等或其他结构)时,我发现某些结构难以理解.即使我的ASM非常糟糕而且我从不使用它,但是能够理解某些关键字如何对计算机和正在进行的工作有所帮助,这对我有很大帮助.
DMD编译器有许多有趣的功能(代码覆盖,生成接口(头文件),生成文档,分析,...)但我还没有看到转换输出ASM代码.编译器会生成.obj文件,并从阅读以下链接:http://www.digitalmars.com/ctg/obj2asm.html我怀疑我需要一个工具来手动转换目标文件.我更喜欢编译器开关,有吗?
在该页面的底部,我链接到一个页面,我可以在其中支付包含该工具的产品.来自GNU背景,我非常不满意.这仅适用于C/C++,还是适用于D编译器?
有没有其他方法可以将这些.obj文件转换为可读的ASM代码,还是必须使用其他D编译器(如GDC或LDC)来获取ASM输出?我不愿意.DMD由创始人自己创建,我敢肯定他正确地实现了大部分功能/大部分优化.
那么,我该如何看一看ASM代码呢?
谢谢.
我正在将我们的统治SDK移植,增强和D-atizing 从C#到D.目前正在处理Vector2数学模块.
以下两种结构之间是否会有任何性能差异?我的基准测试表现出相同的性能,但我想获得一些专家见解:)
struct Vector2(T)
{
T x, y;
@property T u() { return x; }
@property T v() { return y; }
@property void u(T value) { x = value; }
@property void v(T value) { y = value; }
}
struct Vector2(T)
{
union { T x, u; }
union { T y, v; }
}
Run Code Online (Sandbox Code Playgroud)
显然,我想使用工会来实现语法简洁.但使用它们有任何不可预见的陷阱吗?我不熟悉他们的低级细节.
另外,我正在添加类似于HLSL/GLSL的vector属性语法,例如,vec1.yxz + = vec2.xyz; 有......没有..可能的方式与工会而不是@property这样做?
我是D的新手,想要解析表格的生物文件
>name1
acgcgcagagatatagctagatcg
aagctctgctcgcgct
>name2
acgggggcttgctagctcgatagatcga
agctctctttctccttcttcttctagagaga
>name2
gag ggagag
Run Code Online (Sandbox Code Playgroud)
这样我就可以捕获'header'name1,name2,name3以及相应的'sequence'数据,..acgcg ... stuff.
现在我有了这个.但它只会逐行迭代,
import std.stdio;
import std.stream;
import std.regex;
int main(string[] args){
auto filename = args[1];
auto entry_name = regex(r"^>(.*)"); //captures header only
auto fasta_regex = regex(r"(\>.+\n)([^\>]+\n)"); //captures header and correponding sequence
try {
Stream file = new BufferedFile(filename);
foreach(ulong n, char[] line; file) {
auto name_capture = match(line,entry_name);
writeln(name_capture.captures[1]);
}
file.close();
}
catch (FileException xy){
writefln("Error reading the file: ");
}
catch (Exception xx){
writefln("Exception occured: " ~ …
Run Code Online (Sandbox Code Playgroud) 我尝试编译以下代码:
import std.algorithm;
void main()
{
string[] x = ["ab", "cd", "ef"]; // 'string' is same as 'immutable(char)[]'
string space = " ";
char z = joiner( x, space ).front(); // error
}
Run Code Online (Sandbox Code Playgroud)
dmd
带有错误的结尾编译:
test.d(8): Error: cannot implicitly convert expression (joiner(x,space).front()) of type dchar to char
Run Code Online (Sandbox Code Playgroud)
更改char z
为dchar z
确定错误消息,但我很感兴趣,为什么它出现在第一位.
为什么结果joiner(string[],string).front()
是dchar而不是char?
(文档http://dlang.org/phobos/std_algorithm.html#joiner中没有任何内容)
我一直在努力想象这一个,并开始惹恼我.我理解D运行时库.它是什么,它做了什么.我也明白你可以在没有它的情况下编译D app.就像XoMB那样.好吧,XoMB定义了自己的运行时,但有些情况下你不需要编写自己的运行时,如果你不需要它.据我所知,即使用它的DigitalMars D编译器(dmd)在运行时的幕后做了很多事情,比如根据你的程序需要发出对某些东西的引用.而且,每个程序的东西.所以你必须自己定义.我决定尝试,试着弄清楚自己并且相当远.我的意思是让链接器吐出越来越少的错误.对于测试我只想编译一个完整的裸机应用程序,只是为了在没有运行时的情况下工作.或者尽可能少运行时.这是我有我的单一源文件.
module main;
void _main()
{
int a = 2 + 3;
}
Run Code Online (Sandbox Code Playgroud)
我编译:dmd -c main.d -defaultlib =
然后链接:link main.obj
这是我得到的错误:OPTLINK:警告23:没有堆栈和OPTLINK:警告134:没有起始地址
你可以看到我试着chaingng main来_main来摆脱无起始地址错误,但是,无论如何,没有帮助.我需要做些什么来解决这两个最后的错误?如果我可以让它工作,我想我可以查找我需要实现什么来获得更多的功能.但是,如果有人愿意帮助我解决这个问题,那就太过分了!
对于使用从github克隆并单独构建的包的D程序,建议的开发过程是什么?
通常与使用make,autotools,cmake等构建C/C++项目有关.
大多数其他构建规范都有一个安装目标.是否应该在构建中有一个安装目标,或者我们应该直接从构建它的位置链接库并添加寄存器包含在D_INCLUDE_PATH
其中然后使用DFLAGS=-I<D_INCLUDE_PATH>
?