Професионална програма
Loading...
+ Нов въпрос
Elena123456 avatar Elena123456 168 Точки

1. Odd Lines- Lab: Streams, Files and Directories

Здравейте,

опитвам се да реша първата задача от Лаба, но не със стриймове, както трейнъра показва, а чрез използването на класа File. Искам максимално добре да се науча да се възползвам от готовите функционалностти на езика, защото съм убедена, че свободното време на програмиста е оскъдно и ценно.

Условие- https://softuni.bg/trainings/resources/officedocument/52727/streams-files-and-directories-lab-csharp-advanced-september-2020/3007

Write a program that reads a text file and writes it's every odd line in another file. Line numbers starts from 0.

Имам създадени нови два текстови файла и са точно там където се стартира програмата (при .exe fail), като успявам да чета информация от единия, но не и да презапиша нечетните редове в другия файл. Втория файл си остава празен.

Моля за помощ!

 

using System;
using System.IO;

namespace OddLines
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] text = File.ReadAllLines("OddLines.txt");
            for (int i = 0; i < text.Length; i++)
            {
                if (i % 2 != 2)
                {
                    File.WriteAllText("OddLinesAnother.txt",text[i]);
                }
            }
        }
    }
}

Тагове:
1
C# Advanced 13/01/2021 17:32:25
Elena123456 avatar Elena123456 168 Точки

Между другото дори когато пиша кода във VS едно към едно с този от лекцията, отново не виждам да се презаписват нечетните редове от единия файл в другия, като и изобщо не се създава папката "output.txt". Лектортър веднага след този код отваря папката на проекта и се вижда създаден нов файл с нечетните редове. При мен няма такъв файл в папката на проекта.

Общо взето от тази задача успявам да изпиша нечетните редове на конзолата, но не и да ги презапиша в нов файл. Някой има ли идея какво се случва?

 

using System;
using System.IO;

namespace OddLines
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var reader = new StreamReader($"OddLines.txt"))
            {
                using (var writer = new StreamWriter("output.txt"))
                {
                    int counter = 0;
                    while (!reader.EndOfStream)
                    {
                        var line = reader.ReadLine();
                        if (counter % 2 == 1)
                        {
                            writer.WriteLine(line);
                        }

                        counter++;
                    }
                }
            }
        }
    }
}

0
13/01/2021 23:47:16
Axiomatik avatar Axiomatik 777 Точки
using System;
using System.IO;

namespace oddLines
{
    class Program
    {
        static void Main(string[] args)
        {
            using var reader = new StreamReader(@"../../../input.txt");

            using var writer = new StreamWriter(@"../../../output.txt");

            var line = reader.ReadLine();

            int count = 0;

            while (line != null)
            {
                if (count % 2 != 0)
                {
                    writer.WriteLine((line));
                }

                count++;
                line = reader.ReadLine();
            }
        }
    }
}

In general, this depends where you place your original text-file and in which folder you want to create your new document. The standard setup is to use @"../../../" to indicate to the program to use the principal project folder (where program.cs is located), don't forget to place the original text file there. That way your program will always work, regardless whether you're running with or without debugger.

Best,

1
krum_43 avatar krum_43 450 Точки

                            Здравей Елена,   

 

По принцип остатъците по модул 2 са 0 и 1?

Може би проверката дали итератора е нечетен би трябва да е:       if(i%2=1) ?!?      

1
15/01/2021 06:44:13
Elena123456 avatar Elena123456 168 Точки

Thanks a lot to both of you! 

In the first case with "File" my mistake is- "i%2!=2" (with i%2!=0 is not working too), but in the second case with StreamRider and StreamWriter, I used to i%2==1 for odd lines and is not working too. 

I did everything from the video step by step, but without any result.

I will try Axiomatik's solution with absolute path.

In another forum somebody said that my logic with StreamReader and StreamWriter is correct, but maybe the problem is in my input file with too much spaces and new lines, and the program skiped the logic. Is that possible?

if Axiomatic's solution doesn't work on my PC I would unistal my Office packages and install different version. smiley

 

 

0
14/01/2021 11:58:30
Elena123456 avatar Elena123456 168 Точки

Yes, is working correctly with my new Notepad++ and absolute path.angel

@Axiomatik

thank you so much!

 

using System;
using System.IO;

namespace OddLines
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var reader = new StreamReader(@"C:\Users\eli\Desktop\AllMyRepos\CSharp-Advanced\StreamsFilesAndDirectories-Lab\OddLines\input.txt"))
            {
                using (var writer = new StreamWriter(@"C:\Users\eli\Desktop\AllMyRepos\CSharp-Advanced\StreamsFilesAndDirectories-Lab\OddLines\output.txt"))
                {
                    int counter = 0;
                    while (!reader.EndOfStream)
                    {
                        var line = reader.ReadLine();
                        if (counter % 2 == 1)
                        {
                            writer.WriteLine(line);
                        }

                        counter++;
                    }
                }
            }
        }
    }
}

 

1
Axiomatik avatar Axiomatik 777 Точки

Super, but it should also work with VS.

Best,

1