[Mono-list] Bug in String.Replace / StringBuilder.Replace

Jochen Wezel jwezel@compumaster.de
Wed, 14 Jul 2004 16:36:40 +0200


This is a multi-part message in MIME format.

------_=_NextPart_001_01C469AF.FA6160BE
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi!

There is a problem in Mono 1.0 when replacing in a string or =
stringbuilder object.

        Try
            'Dim myBuffer As New System.Text.StringBuilder
            Dim mybuffer As String
            Dim myReader As New System.IO.StreamReader(WindowsFile, =
System.Text.Encoding.Default, False)
            Dim myWriter As New System.IO.StreamWriter(UnixFile, False, =
System.Text.Encoding.Default)

            Console.WriteLine("Reading file...")
            'myBuffer.Append(myReader.ReadToEnd)
            mybuffer =3D myReader.ReadToEnd()
            myReader.Close()
            Console.WriteLine("Converting data...")
            myBuffer.Replace(vbCrLf, vbLf)
            Console.WriteLine("Writing file...")
            myWriter.Write(myBuffer.ToString)
            myWriter.Close()
            Console.WriteLine("File successfully converted")

        Catch ex As Exception
            System.Console.WriteLine(ex.ToString)
            System.Console.ReadLine()
        End Try

The myBuffer variable contains a string of 7 MB. For small strings, it =
seems to work. But with larger ones as my 7 MB string, the line
            myBuffer.Replace(vbCrLf, vbLf)
runs more than half an hour before finishing.

Can somebody please fix this asap? Thanks!!!

Regards
Jochen

*************************************************************************=
***
*************************************************************************=
***
CompuMaster GmbH
Agentur f=FCr moderne Kommunikation
Jochen Wezel, Multimedia-Programmierung
Rhein-Mosel-Stra=DFe 69, 56281 Emmelshausen, GERMANY
Fon: +49 6747 95084-12 / Fax: +49 6747 95084-50
http://www.compumaster.de eMail: jwezel@compumaster.de
+++ Mitglied im DEUTSCHEN MULTIMEDIA VERBAND d m m v, http://www.dmmv.de =
+++

*************************************************************************=
***
Unsere aktuellen AGBs befinden sich auf unserer Website im Bereich
"Rechtliches"
*************************************************************************=
***

Diese eMail enth=E4lt vertrauliche und/oder rechtlich gesch=FCtzte =
Informationen.
Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrt=FCmlich
erhalten haben, informieren Sie bitte sofort den Absender und vernichten =
Sie
diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe =
dieser
Mail ist nicht gestattet.

This e-mail may contain confidential and/or privileged information. If =
you
are not the intended recipient (or have received this e-mail in error)
please notify the sender immediately and destroy this e-mail.
Any unauthorized copying, disclosure or distribution of the material in =
this
e-mail is strictly forbidden.
*************************************************************************=
***
*************************************************************************=
***


------_=_NextPart_001_01C469AF.FA6160BE
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Diso-8859-1">
<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version =
6.5.7226.0">
<TITLE>Bug in String.Replace / StringBuilder.Replace</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P><FONT SIZE=3D2 FACE=3D"Arial">Hi!</FONT>
</P>

<P><FONT SIZE=3D2 FACE=3D"Arial">There is a problem in Mono 1.0 when =
replacing in a string or stringbuilder object.</FONT>
</P>

<P><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><FONT =
COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier New">Try</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
</FONT><FONT COLOR=3D"#008000" SIZE=3D2 FACE=3D"Courier New">'Dim =
myBuffer As New System.Text.StringBuilder</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier =
New">Dim</FONT><FONT SIZE=3D2 FACE=3D"Courier New"> mybuffer =
</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier =
New">As</FONT><FONT SIZE=3D2 FACE=3D"Courier New"> </FONT><FONT =
COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier New">String</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier =
New">Dim</FONT><FONT SIZE=3D2 FACE=3D"Courier New"> myReader =
</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier =
New">As</FONT><FONT SIZE=3D2 FACE=3D"Courier New"> </FONT><FONT =
COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier New">New</FONT><FONT SIZE=3D2 =
FACE=3D"Courier New"> System.IO.StreamReader(WindowsFile, =
System.Text.Encoding.Default, </FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 =
FACE=3D"Courier New">False</FONT><FONT SIZE=3D2 FACE=3D"Courier =
New">)</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier =
New">Dim</FONT><FONT SIZE=3D2 FACE=3D"Courier New"> myWriter =
</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier =
New">As</FONT><FONT SIZE=3D2 FACE=3D"Courier New"> </FONT><FONT =
COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier New">New</FONT><FONT SIZE=3D2 =
FACE=3D"Courier New"> System.IO.StreamWriter(UnixFile, </FONT><FONT =
COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier New">False</FONT><FONT =
SIZE=3D2 FACE=3D"Courier New">, System.Text.Encoding.Default)</FONT>
</P>

<P><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
Console.WriteLine(&quot;Reading file...&quot;)</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
</FONT><FONT COLOR=3D"#008000" SIZE=3D2 FACE=3D"Courier =
New">'myBuffer.Append(myReader.ReadToEnd)</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
mybuffer =3D myReader.ReadToEnd()</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
myReader.Close()</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
Console.WriteLine(&quot;Converting data...&quot;)</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
myBuffer.Replace(vbCrLf, vbLf)</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
Console.WriteLine(&quot;Writing file...&quot;)</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
myWriter.Write(myBuffer.ToString)</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
myWriter.Close()</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
Console.WriteLine(&quot;File successfully converted&quot;)</FONT>
</P>

<P><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><FONT =
COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier New">Catch</FONT><FONT =
SIZE=3D2 FACE=3D"Courier New"> ex </FONT><FONT COLOR=3D"#0000FF" =
SIZE=3D2 FACE=3D"Courier New">As</FONT><FONT SIZE=3D2 FACE=3D"Courier =
New"> Exception</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
System.Console.WriteLine(ex.ToString)</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
System.Console.ReadLine()</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><FONT =
COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier New">End</FONT><FONT SIZE=3D2 =
FACE=3D"Courier New"> </FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 =
FACE=3D"Courier New">Try</FONT>
</P>

<P><FONT SIZE=3D2 FACE=3D"Arial">The myBuffer variable contains a string =
of 7 MB. For small strings, it seems to work. But with larger ones as my =
7 MB string, the line</FONT></P>

<P><FONT SIZE=3D2 FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
myBuffer.Replace(vbCrLf, vbLf)</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Arial">runs more than half an hour before =
finishing.</FONT>
</P>

<P><FONT SIZE=3D2 FACE=3D"Arial">Can somebody please fix this asap? =
Thanks!!!</FONT>
</P>

<P><FONT SIZE=3D2 FACE=3D"Arial">Regards</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Arial">Jochen</FONT>
</P>

<P><FONT SIZE=3D2 FACE=3D"Courier =
New">********************************************************************=
********</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier =
New">********************************************************************=
********</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier New">CompuMaster GmbH</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier New">Agentur f=FCr moderne =
Kommunikation</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier New">Jochen Wezel, =
Multimedia-Programmierung</FONT>

<BR><FONT SIZE=3D2 FACE=3D"Courier New">Rhein-Mosel-Stra=DFe 69, 56281 =
Emmelshausen, GERMANY</FONT>

<BR><SPAN LANG=3D"fr"><FONT SIZE=3D2 FACE=3D"Courier New">Fon: +49 6747 =
95084-12 / Fax: +49 6747 95084-50</FONT></SPAN>

<BR><SPAN LANG=3D"de"></SPAN><A HREF=3D"http://www.compumaster.de"><SPAN =
LANG=3D"de"><U><FONT COLOR=3D"#0000FF" SIZE=3D2 FACE=3D"Courier =
New">http://www.compumaster.de</FONT></U></SPAN><SPAN =
LANG=3D"de"></SPAN></A><SPAN LANG=3D"de"></SPAN><SPAN =
LANG=3D"fr"></SPAN><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier =
New"> eMail: jwezel@compumaster.de</FONT></SPAN>

<BR><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier New">+++ Mitglied =
im DEUTSCHEN MULTIMEDIA VERBAND d m m v, </FONT></SPAN><A =
HREF=3D"http://www.dmmv.de"><SPAN LANG=3D"de"><U><FONT COLOR=3D"#0000FF" =
SIZE=3D2 FACE=3D"Courier =
New">http://www.dmmv.de</FONT></U></SPAN></A><SPAN LANG=3D"de"><FONT =
SIZE=3D2 FACE=3D"Courier New"> +++</FONT></SPAN>
</P>

<P><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier =
New">********************************************************************=
********</FONT></SPAN>

<BR><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier New">Unsere =
aktuellen AGBs befinden sich auf unserer Website im =
Bereich</FONT></SPAN>

<BR><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier =
New">&quot;Rechtliches&quot;</FONT></SPAN>

<BR><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier =
New">********************************************************************=
********</FONT></SPAN>
</P>

<P><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier New">Diese eMail =
enth=E4lt vertrauliche und/oder rechtlich gesch=FCtzte =
Informationen.</FONT></SPAN>

<BR><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier New">Wenn Sie nicht =
der richtige Adressat sind oder diese E-Mail irrt=FCmlich</FONT></SPAN>

<BR><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier New">erhalten =
haben, informieren Sie bitte sofort den Absender und vernichten =
Sie</FONT></SPAN>

<BR><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier New">diese Mail. =
Das unerlaubte Kopieren sowie die unbefugte Weitergabe =
dieser</FONT></SPAN>

<BR><SPAN LANG=3D"en-gb"><FONT SIZE=3D2 FACE=3D"Courier New">Mail ist =
nicht gestattet.</FONT></SPAN>
</P>

<P><SPAN LANG=3D"en-gb"><FONT SIZE=3D2 FACE=3D"Courier New">This e-mail =
may contain confidential and/or privileged information. If =
you</FONT></SPAN>

<BR><SPAN LANG=3D"en-gb"><FONT SIZE=3D2 FACE=3D"Courier New">are not the =
intended recipient (or have received this e-mail in error)</FONT></SPAN>

<BR><SPAN LANG=3D"en-gb"><FONT SIZE=3D2 FACE=3D"Courier New">please =
notify the sender immediately and destroy this e-mail.</FONT></SPAN>

<BR><SPAN LANG=3D"en-gb"><FONT SIZE=3D2 FACE=3D"Courier New">Any =
unauthorized copying, disclosure or distribution of the material in =
this</FONT></SPAN>

<BR><SPAN LANG=3D"en-gb"><FONT SIZE=3D2 FACE=3D"Courier New">e-mail is =
strictly forbidden.</FONT></SPAN>

<BR><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier =
New">********************************************************************=
********</FONT></SPAN>

<BR><SPAN LANG=3D"de"><FONT SIZE=3D2 FACE=3D"Courier =
New">********************************************************************=
********</FONT></SPAN>
</P>

</BODY>
</HTML>
------_=_NextPart_001_01C469AF.FA6160BE--