Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

How to replace the \n with \r\n?

Posted on 1998-04-23
8
Medium Priority
?
247 Views
Last Modified: 2013-11-19
I have a string :

      j = 0 ;
      j = sprintf(str, "Test string") ;
      j+= sprintf(str+j, "\nThickness %d ", nThickness);
      j+= sprintf(str+j, "\nWidth %d ", nWidth);

During runtime i wish to replace the \n by \r\n so that i
can display the string properly in an CEdit box.
How do i write simple function to do that?  
0
Comment
Question by:engllf
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
8 Comments
 
LVL 23

Accepted Solution

by:
chensu earned 40 total points
ID: 1301499
Since we are on the MFC Programming Topic Area, we should use MFC.

CString strBefore;  // your str

...

CString strAfter;
for (int ni = 0; ni < strBefore.GetLength(); ni++)
    strAfter += strBefore[ni] == '\n' ? "\r\n" : strBefore[ni];


By the way, why can't you use "\r\n" directly instead of "\n"? In Windows, it is recommended using wsprintf rather than sprintf. And, you can use CString::Format.
0
 

Author Comment

by:engllf
ID: 1301500
Let me study through your suggestion...
0
 
LVL 10

Expert Comment

by:RONSLOW
ID: 1301501
look at ww.codeguru.com for a better CString extension class that lets you do search and replace.  That might help.

Also, doing this as shown above will be slow as the subscripting and concatenation of the string char by char is not very efficient.

If you want to use CString functionsm, use SpanExcluding or Find to find the '\n' and then insert a '\r' infront. eg.

CString myString; // whatever
CString temp = myString;
myString.Empty();
int n = temp.GetLength();
for (;;) {
  int i = temp.Find('\n');
  if (i < 0) {
    myString += temp;
    break;
  } else {
    myString += temp.Left(i) + "\r\n";
    temp = temp.Mid(i+1);
  }
}

but if you can, just format with \r\n instead
eg

CString myString;
myString.Format("Test string\nThickness %d \nWidth %d ", nThickness, nWidth);

andsafe yourself the trouble

Please reject and accept my answer if you find it more helpful.


0
Learn how to optimize MySQL for your business need

With the increasing importance of apps & networks in both business & personal interconnections, perfor. has become one of the key metrics of successful communication. This ebook is a hands-on business-case-driven guide to understanding MySQL query parameter tuning & database perf

 
LVL 10

Expert Comment

by:RONSLOW
ID: 1301502
Ooops that should have been

CString myString;
myString.Format("Test string\r\nThickness %d\r\nWidth %d", nThickness, nWidth);

0
 
LVL 23

Expert Comment

by:chensu
ID: 1301503
I don't think the code shown by RONSLOW is faster than mine. RONSLOW's code relies much on how often the '\n' occurs. It will be definitely slower if the '\n' occurs frequently.
0
 

Author Comment

by:engllf
ID: 1301504
About 20% of my string is "\n".
The string is specially formatted and passed to another application via DDE.  The string is analysed and ...

If i am to use "\r\n", my string length
is going to increase significantly containing non-useful
information.
0
 
LVL 23

Expert Comment

by:chensu
ID: 1301505
You need to balance it. Space or time? The conversion also takes space.
0
 
LVL 10

Expert Comment

by:RONSLOW
ID: 1301506
and you need somewhere to store the resultant string anyway.

The most efficient is to put in the "\r\n" in the first place.  No extra space required for converted string and not time required to convert it.

If that is not practical (for some reason), then my method will probably be faster (if you want to use CString functions).  You can probably get a little bit faster using straight C-like code and the standard library functions - but the code won't look as nice

0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Displaying information on the statusbar.   Continuing from the third article about sudoku.   Open the project in visual studio. Status bar – let’s display the timestamp there.  We need to get the timestamp from the document s…
Introduction: Hints for the grid button.  Nested classes, templated collections.  Squash that darned bug! Continuing from the sixth article about sudoku.   Open the project in visual studio. First we will finish with the SUD_SETVALUE messa…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question