Samkelo Siyabonga Ngubo Ответов: 2

Как я могу читать числа из текстового файла и выводить сумму для каждой строки из текстового файла


Read in a series of numbers from a text-file (the data is given below). For each row in the file, setup a thread to calculate the sum of the values of that vector. Each of the vector sums must then be written to a new file, sorted in ascending order.
Input files contents:
6,12,2,9,17
7,3,15,19,4
10,5,8,21,13


Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System;
using System.IO;

namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {
            string filePath = @"C:Test.txt";
            string line;

            if (File.Exists(filePath))
            {
                StreamReader file = null;
                try
                {
                    file = new StreamReader(filePath);
                    while ((line = file.ReadLine()) != null)
                    {
                        Console.WriteLine(line);
                    }
                }
                finally
                {
                    if (file != null)
                        file.Close();
                }
            }

            Console.ReadLine();
        }
    }
    
}

F-ES Sitecore

Во-первых, мы здесь не для того, чтобы делать за тебя уроки. Во вторых просто сбросив свой код и даже не объяснив в чем проблема вы все равно не получите помощи,

Samkelo Siyabonga Ngubo

Вы читали мой вопрос и проверили, что я пробовал?

F-ES Sitecore

Это не ваш вопрос, это домашнее задание вырезано и вставлено, как оно сформулировано как команда или инструкция, а не вопрос. Это написанная команда, потому что она приказывает вам делать работу.

Samkelo Siyabonga Ngubo

это из моего решения, и оно дает мне вывод из текстового файла, но не дает мне сумму каждой строки

F-ES Sitecore

Все, что делает ваш код, - это читает файл строка за строкой и ничего с ним не делает. Вам нужно будет разбить каждую строку на отдельные числа и сложить их. Далее вам нужно будет сделать каждую строку в новом потоке, а затем иметь какой-то механизм, позволяющий узнать, когда все потоки закончили свою работу, собрать результаты и создать файл с ними по порядку, так что вам еще предстоит много работы.

Ralf Meier

Я полностью согласен с F-ES Sitecore, потому что вы ничего не пробовали делать с импортированной строкой (кроме записи ее на консоль).
Но... и это очень хорошо ... вы узнали, что импортированная строка является строкой-поздравляю.
Поэтому-предлагаю: сделайте что-нибудь с этой строкой. Возможно, вы попытаетесь понять, что написал F-ES Sitecore в своем последнем ответе ... (посмотрите на слово "разделить", а затем подумайте, как можно было бы добавить части-можно ли добавить строки в их значение ?)

2 Ответов

Рейтинг:
8

Samkelo Siyabonga Ngubo

Спасибо я сделал свою домашнюю работу вот решение

using System;
using System.IO;

namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Read the data.txt textfile.
            var data = System.IO.File.ReadAllText(@"..\..\Reading.txt");

            // Create a new List of float[]
            var arrays = new List<float[]> ();

            // Split data file content into lines
            var lines = data.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

            // Loop all lines
            foreach (var line in lines)
            {
                // Create a new List<float> representing all the commaseparated numbers in this line
                var lineArray = new List <float> ();

                // Slipt line by , and loop through all the numeric valus
                foreach (var s in line.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    // Add converted numeric value to our lineArray 
                    lineArray.Add(Convert.ToInt64(s));
                    //lineArray.Add(Convert.ToSingle(s));
                }
                // Add lineArray to main array
                arrays.Add(lineArray.ToArray());


                // Loop repeats until there are noe more lines

                int i = 0, result = 0;
                while (i < lineArray.Count)
                {
                    result += Convert.ToInt32(lineArray[i++]);
                }

                Console.WriteLine(result);
            }

            //var numberOfRows = lines.Count();
            //var numberOfValues = arrays.Sum(s => s.Length);

            //Console.WriteLine(numberOfRows);
            //Console.WriteLine(numberOfValues);
            Console.ReadLine();

        }
    }
    
}


MosuliNodangala

Молодец Сиябонга, бафо уяйикхаказиса индлу эмняма.

Рейтинг:
2

OriginalGriff

Это твое домашнее задание, поэтому я не буду давать тебе код.
Я бы не стал возиться с StreamReader:

string[] lines = File.ReadAllLines(pathToFile);
Будет делать это хорошо. Затем вы можете использовать foreach цикл для обработки каждой строки.
Внутри цикла настройте поток (BackgroundWorker, вероятно, самый простой способ) для обработки каждой строки.
В потоке используйте строку.Разделить, чтобы разбить строку на каждую запятую:
string[] parts = line.Split(',');

Затем вы можете использовать int.Попробуйте проанализировать каждую строку, чтобы преобразовать ее в число.
Затем вы можете вычислить векторную сумму и вернуть ее в основной поток.
Основной поток собирает все суммы, объединяет их в коллекцию, сортирует коллекцию и записывает их в новый файл.

Делайте это понемногу, и все это довольно просто!