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
  • Re: ubyte[] -> immutable(u... vino via Digitalmars-d-learn

Reply via email to