Loading...
Elena123456 avatar Elena123456 235 Точки

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 235 Точки

Между другото дори когато пиша кода във 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 2422 Точки
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 756 Точки

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

 

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

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

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

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 235 Точки

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 2422 Точки

Super, but it should also work with VS.

Best,

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.