On Friday, 10 September 2010 at 15:15:38 UTC, Andrej Mitrovic
wrote:
Yeah, one would think the destination is on the left (just like
the standard C way of doing it), but it's not. I checked it in
the docs and the source. And idup works, thanks.
Kagamin Wrote:
Andrej Mitrovic Wrote:
> foreach (ubyte[] buffer; stdin.byChunk(bufferSize))
> {
> immutable(ubyte)[] copy_buffer;
> copy(buffer, copy_buffer);
>
> writeln(copy_buffer); // writes nothing
>
> send(tid, copy_buffer);
> }
Isn't destination the left argument?
Why you don't use send(tid, buffer.idup);
?
Hi Andrei/All,
Request your help, I am trying the program written by you with
few changes such as the example program read the input from stdin
and prints the data to stdout, but my program reads the input
from the file(readfile.txt) and writes the output to another
file(writefile.txt), and I am getting the below errors while
compiling
Testing:
Read a file(readfile.txt : Contain 20,000 lines) by chunk into a
buffer(read buffer)
Pass the buffered data to an output buffer(write buffer) and then
write the output buffer to a to another file(writefile.txt).
Error:
[root@localhost DProjects]# dmd readwriteb.d
readwriteb.d(7): Error: cannot implicitly convert expression
(__aggr2859.front()) of type ubyte[] to immutable(ubyte)[]
readwriteb.d(15): Error: cannot implicitly convert expression
(receiveOnly()) of type immutable(ubyte)[] to
std.outbuffer.OutBuffer
[root@localhost DProjects]#
Version: DMD64 D Compiler v2.071.0
Code:
import std.algorithm, std.concurrency, std.stdio, std.outbuffer,
std.file;
void main() {
enum bufferSize = 1024 * 100;
auto file = File("readfile.txt", "r");
auto tid = spawn(&fileWriter);
foreach (immutable(ubyte)[] buffer; file.byChunk(bufferSize)) {
send(tid, buffer);
}
}
void fileWriter() {
auto wbuf = new OutBuffer();
for (;;) {
wbuf = receiveOnly!(immutable(ubyte)[])();
write("writefile.txt", wbuf);
}
}
After few changes as below I was able to compile, but when i run
the program there is no data in the writefile.txt
import std.algorithm, std.concurrency, std.stdio, std.file;
void main() {
enum bufferSize = 1024 * 100;
auto file = File("readfile.txt", "r");
auto tid = spawn(&fileWriter);
foreach (ubyte[] buffer; file.byChunk(bufferSize)) {
send(tid, buffer.idup);
}
}
void fileWriter() {
auto file = File("writefile.txt", "w");
for (;;) {
auto wbuf = receiveOnly!(ubyte[])();
file.writeln("writefile.txt", wbuf);
}
}
From,
Vino.B