Re: writeln Function while reading a Text File is printing appending text "before text" and "after text" at the same position

2020-06-05 Thread Ali Çehreli via Digitalmars-d-learn

On 6/3/20 1:43 PM, BoQsc wrote:


Chomp sounds kind of funny hahaha.


Also consider strip, stripLeft, and stripRight. (Not because they may be 
funny but because they are useful as well. :) )


Ali


Re: writeln Function while reading a Text File is printing appending text "before text" and "after text" at the same position

2020-06-03 Thread H. S. Teoh via Digitalmars-d-learn
On Wed, Jun 03, 2020 at 08:43:43PM +, BoQsc via Digitalmars-d-learn wrote:
> On Wednesday, 3 June 2020 at 20:05:52 UTC, ttk wrote:
[...]
> > That works, but consider using chomp() instead.
> > 
> > https://dlang.org/phobos/std_string.html#.chomp
> 
> Chomp sounds kind of funny hahaha.
> Who came up with these function names? Walter Bright?
> Anyways, Chomp's way looks way more simple. Thanks.

Chomp comes from Perl.


T

-- 
For every argument for something, there is always an equal and opposite 
argument against it.
Debates don't give answers, only wounded or inflated egos.


Re: writeln Function while reading a Text File is printing appending text "before text" and "after text" at the same position

2020-06-03 Thread BoQsc via Digitalmars-d-learn

On Wednesday, 3 June 2020 at 20:05:52 UTC, ttk wrote:

On Wednesday, 3 June 2020 at 19:53:03 UTC, BoQsc wrote:

Removing the last element of the string got it resolved.
Might not be the best way and adding additional check for 
carriage return before removing the element would be better, 
so this is only initial proof.



Improved example with the above comments resolved.


That works, but consider using chomp() instead.

https://dlang.org/phobos/std_string.html#.chomp


Chomp sounds kind of funny hahaha.
Who came up with these function names? Walter Bright?
Anyways, Chomp's way looks way more simple. Thanks.


import std.stdio;
import std.algorithm;
import std.string;
import std.uni : lineSep;

int lineNumber;
void main(){

File exampleFile = File("exampleText.txt");
lineNumber = 0;
foreach(line; exampleFile.byLine){

if (line == " Sphinx of black quartz, judge my vow.\u000D"){
			writeln(lineNumber, ". hahahahahahaha", chomp(line, "\r"), " 
nononono");


} else {
writeln( lineNumber, ". ", line);
}

lineNumber++;
}
}


Re: writeln Function while reading a Text File is printing appending text "before text" and "after text" at the same position

2020-06-03 Thread ttk via Digitalmars-d-learn

On Wednesday, 3 June 2020 at 19:53:03 UTC, BoQsc wrote:

Removing the last element of the string got it resolved.
Might not be the best way and adding additional check for 
carriage return before removing the element would be better, 
so this is only initial proof.



Improved example with the above comments resolved.


That works, but consider using chomp() instead.

https://dlang.org/phobos/std_string.html#.chomp




Re: writeln Function while reading a Text File is printing appending text "before text" and "after text" at the same position

2020-06-03 Thread BoQsc via Digitalmars-d-learn

Removing the last element of the string got it resolved.
Might not be the best way and adding additional check for 
carriage return before removing the element would be better, so 
this is only initial proof.



Improved example with the above comments resolved.

testingGround.d

import std.stdio;
import std.algorithm;



int lineNumber;
void main(){

File exampleFile = File("exampleText.txt");
lineNumber = 0;
foreach(line; exampleFile.byLine){

if (line == " Sphinx of black quartz, judge my vow.\u000D"){
if (line[line.length -1] == '\u000D'){
line = line.remove(line.length - 1);
}
writeln(lineNumber, ". hahahahahahaha", line, " 
nononono");

} else {
writeln( lineNumber, ". ", line[line.length -1]);
}

lineNumber++;
}
}


Re: writeln Function while reading a Text File is printing appending text "before text" and "after text" at the same position

2020-06-03 Thread BoQsc via Digitalmars-d-learn

On Wednesday, 3 June 2020 at 18:49:38 UTC, ttk wrote:

On Wednesday, 3 June 2020 at 18:23:51 UTC, BoQsc wrote:
Here you can see ". hahahahahahaha" and "nononono" and even 
lineNumber is being merged into the same position. Why is this 
happening and can this be simply resolved?


Your string in "line" has a carriage return character at the 
end, which moves the cursor to the beginning of the display row.


If you remove this trailing carriage return character (0x0D) it 
will display correctly.


With the carriage return character in place, everything written 
to your terminal after the carriage return starts at the 
beginning of the row.


It seems to be correct.
Removing the last element of the string got it resolved.
Might not be the best way and adding additional check for 
carriage return before removing the element would be better, so 
this is only initial proof.


Command Prompt Output
C:\Users\vaida\Desktop\Associative Array Sorting> rdmd 
associativeArraySorting.d

0.  The quick brown fox jumps over the lazy dog
1. hahahahahahaha Sphinx of black quartz, judge my vow.nononono
2. # How vexingly quick daft zebras jump!
3. # The five boxing wizards jump quickly
4. # Maecenas consectetur risus a lacus sodales iaculis.
5. # Morbi sed tortor sollicitudin, pharetra massa egestas, 
congue massa.

6. # Sed sit amet nisi at ligula ultrices posuere quis nec est.
7. # Mauris vel purus viverra, pellentesque elit id, consequat 
felis.



testingGround.d

import std.stdio;
import std.algorithm;



int lineNumber;
void main(){

File exampleFile = File("exampleText.txt");
lineNumber = 0;
foreach(line; exampleFile.byLine){

if (line == " Sphinx of black quartz, judge my vow.\u000D"){
			writeln(lineNumber, ". hahahahahahaha", 
line.remove(line.length - 1), " nononono");


} else {
writeln( lineNumber, ". ", line);
}

lineNumber++;
}
}


Re: writeln Function while reading a Text File is printing appending text "before text" and "after text" at the same position

2020-06-03 Thread Steven Schveighoffer via Digitalmars-d-learn

On 6/3/20 2:23 PM, BoQsc wrote:

C:\Users\vaida\Desktop\Associative Array Sorting> rdmd testingGround.d
0.  The quick brown fox jumps over the lazy dog
nonononoahahahaha Sphinx of black quartz, judge my vow.
2. # How vexingly quick daft zebras jump!
3. # The five boxing wizards jump quickly
4. # Maecenas consectetur risus a lacus sodales iaculis.
5. # Morbi sed tortor sollicitudin, pharetra massa egestas, congue massa.
6. # Sed sit amet nisi at ligula ultrices posuere quis nec est.
7. # Mauris vel purus viverra, pellentesque elit id, consequat felis.


Here you can see ". hahahahahahaha" and "nononono" and even lineNumber 
is being merged into the same position. Why is this happening and can 
this be simply resolved?



testingGround.d

import std.stdio;
import std.algorithm;

int lineNumber;
void main(){

File exampleFile = File("exampleText.txt");
lineNumber = 0;
foreach(line; exampleFile.byLine){

    if (line == " Sphinx of black quartz, judge my vow.\u000D"){
    writeln(lineNumber, ". hahahahahahaha", line, "nononono");

    } else {
    writeln( lineNumber, ". ", line);
    }

    lineNumber++;
}
}


exampleText.txt

 The quick brown fox jumps over the lazy dog
 Sphinx of black quartz, judge my vow.
# How vexingly quick daft zebras jump!
# The five boxing wizards jump quickly
# Maecenas consectetur risus a lacus sodales iaculis.
# Morbi sed tortor sollicitudin, pharetra massa egestas, congue massa.
# Sed sit amet nisi at ligula ultrices posuere quis nec est.
# Mauris vel purus viverra, pellentesque elit id, consequat felis.


\u000D is a carriage return, which means that the terminal moves the 
insertion point to the front of the line, and writes "nononono" over the 
original text there. (BTW, you can just do \r instead)


How do you fix it? I don't know what your requirements are. I don't know 
what you are expecting.


-Steve


Re: writeln Function while reading a Text File is printing appending text "before text" and "after text" at the same position

2020-06-03 Thread ttk via Digitalmars-d-learn

On Wednesday, 3 June 2020 at 18:23:51 UTC, BoQsc wrote:
Here you can see ". hahahahahahaha" and "nononono" and even 
lineNumber is being merged into the same position. Why is this 
happening and can this be simply resolved?


Your string in "line" has a carriage return character at the end, 
which moves the cursor to the beginning of the display row.


If you remove this trailing carriage return character (0x0D) it 
will display correctly.


With the carriage return character in place, everything written 
to your terminal after the carriage return starts at the 
beginning of the row.