Solved

Writing numbers to a file C#

Posted on 2006-11-21
3
4,962 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
[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
  • 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

Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

Question has a verified solution.

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

This is about my first experience with programming Arduino.
Computer science students often experience many of the same frustrations when going through their engineering courses. This article presents seven tips I found useful when completing a bachelors and masters degree in computing which I believe may he…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
Six Sigma Control Plans

628 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