Hi, I am new to C#. Please help me to solve this problem. Given an "input.txt", I want to obtain the "output.txt" as below:

input.txt
5,5
A(,)= 4.6;
B(,)= 0.1;
C(,)= 0.2;
D(,)= 1.6;
E(,)= 245;
F(,)= 3.3;
5,15
A(,)= 6.3;
B(,)= 0.9;
C(,)= 0.2;
D(,)= 1.6;
E(,)= 242;
F(,)= 2.9;
5,25
A(,)= 7.3;
B(,)= 0.2;
C(,)= 0.3;
D(,)= 1.5;
E(,)= 238;
F(,)= 1.9

output.txt
A(5,5)= 4.6;
B(5,5)= 0.1;
C(5,5)= 0.2;
D(5,5)= 1.6;
E(5,5)= 245;
F(5,5)= 3.3;
A(5,15)= 6.3;
B(5,15)= 0.9;
C(5,15)= 0.2;
D(5,15)= 1.6;
E(5,15)= 242;
F(5,15)= 2.9;
A(5,25)= 7.3;
B(5,25)= 0.2;
C(5,25)= 0.3;
D(5,25)= 1.5;
E(5,25)= 238;
F(5,25)= 1.9

From the input.txt, I want to replace the first six "(,)" with "(5,5)", the next six "(,)" with "(5,15)", and the last six "(,)" with "(5,25)". The problem I faced is how to loop 3 times and replace the (,) with "(5,5)", "(5,15)" and "(5,25)"?
In the meantime, I want to delete "5,5", "5,15" and "5,25" lines so that the output.txt will not have these lines.

using System.Text;
using System;
using System.IO;

namespace txt_Console_CSharp
{
class Program
{
static void Main(string[] args)
{

int ind = 0;
int w, h;

while (ind < 3)
{

w = 5;
h = 5 + 10*(ind%4);

for (int i = 0; i < 6; i++)    //loop "(,)" for six time
{
strFile = strFile.Replace("(,)", "("+w.ToString() + "," + h.ToString()+")");
}

ind++;
}

File.WriteAllText("d:\\output.txt", strFile);
}
}
}


Thank you.

6
Contributors
7
Replies
56
Views
3 Years
Discussion Span
Last Post by pitic

Open output file for writing
Start a loop for 3 iterations
Read line from input (we'll call this sub)
Start a loop for 6 iterations
Read line from input (we'll call this base)
Use String.Replace on base replacing (,) with (sub) (we'll call this out)
Write out to output file
end loop (6)
end loop (3)
Close input file
Close output file

However I am not sure what do you mean by:
Start a loop for 3 iterations
Read line from input (we'll call this sub)
Start a loop for 6 iterations
Read line from input (we'll call this base)

Can you please show me the code example in C#?

Thanks.

sch85 calls sub the lines starting with 5,5 5,15 etc.
Do your files always contain 3 of those "sub" items?

I was a little bit curious and i really wanted to do this since i haven t been using the streamreader and streamwritter classes for quite a time. Here is the code that solves your problem but only for 3 characters numbers if for example you had more you would have to make a method for more.

 static void Main(string[] args)
{
# region variables

int counter=0;
string replace= "";
int counter2 = 0;
string concatenate = "";
int j=0;
double[] array = new double[18]; // storing numbers;
char [] buffer=new char[10];
string[] alphabet = new string[6] { "A", "B", "C", "D", "E", "F" };
int interval = alphabet.Length;
int num = 0;

#endregion

List<char> items = new List<char>();
// getting array results;
try
{
{
while (!str.EndOfStream)
{
counter++;

if (counter%7==1) // for a longer data sheet
{
}

else
{
for (int i = 0; i < buffer.Length; i++)
{
if (i > 5 && i < 9) // since there are only 3 characters (decimal, or int ) if there are more, code will not work
{
counter2++;
if (counter2 == 3)
{
foreach (char k in items)
{
concatenate = concatenate + k.ToString();
}

replace = concatenate.Replace('.', ',');
array[j] = double.Parse(replace);
j++;

items.Clear();
replace = "";
concatenate = "";
counter2 = 0;

}
}
}
}
}
}
}

// array filled whith result values;
catch (Exception e) { Console.WriteLine(e.ToString()); }

using (StreamWriter stw = new StreamWriter(@"C:\....txt"))
{
while (counter2 < 3)
{

for (int i = 0; i < alphabet.Length; i++)
{
num++;
}

counter2++;
}

}

}


Hi dandebe, the above is just an example. Actually my program consists of 126 (i.e. from 5,5 ; 5,15 ; 5,25 ; until 5,1255) of those "sub" items.

Thank you castajiz for your code, however when I run it, I get the below result (shown below is a comparison of input.txt and output.txt):

**input.txt **
A(,)= 4.6;
B(,)= 0.1;
C(,)= 0.2;
D(,)= 1.6;
E(,)= 245;
F(,)= 3.3;

output.txt
A(5,5)=46
B(5,5)=1
C(5,5)=2
D(5,5)=16
E(5,5)=245
F(5,5)=33

The decimal point is lost from 4.6 to 46. Besides that 0.1 becomes 1. The semicolon sign ; also lost in the output.txt.