Solved

Writing numbers to a file C#

Posted on 2006-11-21
3
4,793 Views
Last Modified: 2008-02-01
Read all pairs (x, y) from in.txt, one in each line.
In each line of out.txt, write the list of all positive integers that are less than or equal to x and are dividable by y.
If y is equal to 0, write all the primes less than or equal to x.
If you do not find any positive integers, leave the line blank.

out.txt is the answer i need to get.

in.txt
7 2
20 4
6 9
18 0

out.txt
2 4 6
4 8 12 16 20

2 3 5 7 11 13 17


Here is what i have written.  For some reason it doesn't output the "Numers" method but only the "PrimeNumbers" Method.

using System;
using System.IO;

namespace PMTTEST1
{
      class Class1
      {
            static int number1;
            static int number2;
            static int num1;
            static int num2;

            [STAThread]
            static void Main(string[] args)
            {
                  ReadFile();
            }

            public static void ReadFile()
            {
                  string fileName = "input.txt";

                  StreamReader fileReader;
             
                  fileReader = new StreamReader(fileName);
                  string sLine;
      
                  sLine = fileReader.ReadLine();

                  string [] split;
                  const char delm = ' ';

                  while(sLine != null)
                  {
                        split = sLine.Split(delm);

                        number1 = int.Parse(split[0]);
                        number2 = int.Parse(split[1]);

                        if(number2 == 0)
                        {
                              PrimeNumbers();
                        }
                        else
                        {
                              
                              Numbers();
                        }
                        sLine = fileReader.ReadLine();
                  }
            }

            public static void Numbers()
            {
                  StreamWriter fileWriter = new StreamWriter("out.txt");

                  for(int i = 1; i <= number1; i++)
                  {      
                        num1 = i;
                        
                        if((num1 % number2) == 0)
                        {
                              fileWriter.Write(num1+ " ");
                        }
                  }
                  fileWriter.Close();
            }

            public static void PrimeNumbers()
            {
                  StreamWriter fileWriter = new StreamWriter("out.txt");

                  for(int j = 1; j <= number1; j++)
                  {      
                        num2 = j;
                        
                        if((Math.Pow(2, num2) % num2) == 2)
                        {
                              fileWriter.Write(num2+ " ");
                        }
                  }
                  fileWriter.Close();
            }
      }
}
0
Comment
Question by:jmkotman
  • 2
3 Comments
 
LVL 18

Accepted Solution

by:
Ravi Singh earned 500 total points
ID: 17988934
Hi, you need to append to the out.txt not overwrite it each time (you can specify a boolean in the constructor for StreamWriter to append), and also you want a WriteLine before calling fileWriter.Close(), the following methods have the modifications:

            public static void Numbers()
            {
                  StreamWriter fileWriter = new StreamWriter("out.txt", true);

                  for(int i = 1; i <= number1; i++)
                  {    
                        num1 = i;
                   
                        if((num1 % number2) == 0)
                        {
                              fileWriter.Write(num1+ " ");
                        }
                  }
                  fileWriter.WriteLine();
                  fileWriter.Close();
            }

            public static void PrimeNumbers()
            {
                  StreamWriter fileWriter = new StreamWriter("out.txt", true);

                  for(int j = 1; j <= number1; j++)
                  {    
                        num2 = j;
                   
                        if((Math.Pow(2, num2) % num2) == 2)
                        {
                              fileWriter.Write(num2+ " ");
                        }
                  }

                  fileWriter.WriteLine();
                  fileWriter.Close();
            }
0
 
LVL 18

Expert Comment

by:Ravi Singh
ID: 17989012
obviously the program will continue appending to the file across multiple runs, you can delete the output file if it exists - on your program startup... so that the output only contains the results of the current run:

if (File.Exists("out.txt"))
    File.Delete("out.txt");
0
 
LVL 44

Expert Comment

by:Arthur_Wood
ID: 17989049
You were very close.  I took the liberty of re-writing some of your code.  See if you understand why.-


using System;
using System.IO;

namespace PMTTEST1
{
      class Class1
      {
            static int number1;
            static int number2;
            static int num1;
            static int num2;
        static StreamWriter fileWriter;
            static StreamReader fileReader;

            [STAThread]
            static void Main(string[] args)
            {

                  string fileName = "input.txt";
                  fileReader = new StreamReader(fileName);
                  fileWriter = new StreamWriter("out.txt");

                  ReadFile();

                  fileWriter.Close();
            }

            public static void ReadFile()
            {
                                    
                  string sLine = fileReader.ReadLine();
     
                  string [] split;
                  const char delm = ' ';

                  while(sLine != null)
                  {
                        split = sLine.Split(delm);

                        number1 = int.Parse(split[0]);
                        number2 = int.Parse(split[1]);

                        if(number2 == 0)
                        {
                              PrimeNumbers();
                        }
                        else
                        {
                         
                              Numbers();
                        }
                        sLine = fileReader.ReadLine();
                  }
            }

            public static void Numbers()
            {
                  

                  for(int i = 1; i <= number1; i++)
                  {    
                        num1 = i;
                   
                        if((num1 % number2) == 0)
                        {
                              fileWriter.Write(num1+ " ");
                        }
                        
                  }
                  fileWriter.WriteLine();
            }

            public static void PrimeNumbers()
            {

                  for(int j = 1; j <= number1; j++)
                  {    
                        num2 = j;
                   
                        if((Math.Pow(2, num2) % num2) == 2)
                        {
                              fileWriter.Write(num2+ " ");
                        }
                  }
                  fileWriter.WriteLine();
                  
            }
      }
}


However, your PrimeNumbers procedure is not quite right.  It skips 2 (which is a Prime number) - see if you can figure out why it is skipping 2

AW
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

Does the idea of dealing with bits scare or confuse you? Does it seem like a waste of time in an age where we all have terabytes of storage? If so, you're missing out on one of the core tools in every professional programmer's toolbox. Learn how to …
A short article about problems I had with the new location API and permissions in Marshmallow
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …

707 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now