Alıştırma - Dosyalardaki verileri okuma ve dosyalara veri yazma

Tamamlandı

Dosyalara veri yazmak ve dosyalardaki verileri okumak için .NET'teki File sınıfını da kullanabilirsiniz.

Tailwind Traders için oluşturduğunuz .NET şaheserinizi bitirmek üzeresiniz. Şimdiye kadar kodunuz herhangi bir dizini okur, tüm .json dosyalarını bulur ve birtotals.txt dosyası oluşturur.

Bu alıştırmada, .json dosyalarını okuyarak, mağaza toplamlarını ekleyerek ve genel toplamıtotals.txt dosyasına yazarak projeyi tamamlaacaksınız.

Projeye Newtonsoft.Json ekleme

  1. Terminali kullanarak Projeye Newtonsoft.Json ekleyin.

    dotnet add package Newtonsoft.Json
    

Satış verilerine hazırlanma

  1. öğesinin Program.csen üstüne ekleyin using Newtonsoft.Json:

    using Newtonsoft.Json;
    
  2. Program.cs yönteminin FindFiles doğrudan altında, record verilerini modelleyen yeni bir ekleyin:

    record SalesData (double Total);
    

Satış toplamlarını hesaplayan bir yöntem oluşturma

  1. içinde Program.cs, önceki adımda eklediğiniz satırın hemen öncesinde record , satış toplamını hesaplayan yeni bir işlev oluşturun. Bu metot, yinelemeli işlem yapmak üzere dosya yolu IEnumerable<string> değerlerini almalıdır.

    double CalculateSalesTotal(IEnumerable<string> salesFiles)
    {
        double salesTotal = 0;
    
        // READ FILES LOOP
    
        return salesTotal;
    }
    
  2. Bu yöntemin içinde öğesini üzerinde yineleyen // READ FILES LOOPbir döngüyle değiştirinsalesFiles, dosyayı okur, içeriği JSON olarak ayrıştırıp değişkeni dosyasındaki salesTotal değerle artırırtotal:

    double CalculateSalesTotal(IEnumerable<string> salesFiles)
    {
        double salesTotal = 0;
    
        // Loop over each file path in salesFiles
        foreach (var file in salesFiles)
        {      
            // Read the contents of the file
            string salesJson = File.ReadAllText(file);
    
            // Parse the contents as JSON
            SalesData? data = JsonConvert.DeserializeObject<SalesData?>(salesJson);
    
            // Add the amount found in the Total field to the salesTotal variable
            salesTotal += data?.Total ?? 0;
        }
    
        return salesTotal;
    }
    

CalculateSalesTotals metodunu çağırma

  1. Program.cs dosyasında, çağrının CalculateSalesTotal hemen üstüne File.WriteAllText işleve bir çağrı ekleyin:

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDir = Path.Combine(currentDirectory, "stores");
    
    var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
    Directory.CreateDirectory(salesTotalDir);
    
    var salesFiles = FindFiles(storesDir);
    
    var salesTotal = CalculateSalesTotal(salesFiles); // Add this line of code
    
    File.WriteAllText(Path.Combine(salesTotalDir, "totals.txt"), String.Empty);
    

Toplamı totals.txt dosyasına yazma

  1. Program.cs dosyasındaki File.WriteAllText bloğunu, salesTotal değişkeninin değerini totals.txt dosyasına yazmak için değiştirin. Bunu yaparken, dosyadaki File.WriteAllText hiçbir şeyin üzerine yazılmaması için File.AppendAllText çağrıyı olarak değiştirin.

    var currentDirectory = Directory.GetCurrentDirectory();            
    var storesDir = Path.Combine(currentDirectory, "stores");
    
    var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
    Directory.CreateDirectory(salesTotalDir);            
    
    var salesFiles = FindFiles(storesDir);
    
    var salesTotal = CalculateSalesTotal(salesFiles);
    
    File.AppendAllText(Path.Combine(salesTotalDir, "totals.txt"), $"{salesTotal}{Environment.NewLine}");
    
  2. Ctrl+SCmd+S / tuşlarına basarak Program.cs dosyasını kaydedin.

Programı çalıştırma

  1. Programı terminalden çalıştırın:

    dotnet run
    

    Programın herhangi bir çıkışı yoktur. salesTotalDir/totals.txt dosyasına bakarsanız, sales.json dosyasındaki tüm satışların toplamını bulursunuz.

  2. Programı terminalden tekrar çalıştırın.

    dotnet run
    
  3. salesTotalDir/totals.txt dosyasını seçin.

    totals.txt dosyasının artık ikinci bir satırı vardır. Programı her çalıştırdığınızda toplamlar yeniden toplanır ve dosyaya yeni bir satır yazılır.

Harika bir iş çıkardınız! Tailwind Traders'ın her gece mağazalarının tüm satışlarını işlemek için kullanabileceği akıllı, sağlam ve kullanışlı bir araç yazdınız. Bir sonraki ünitede öğrendiklerinizi gözden geçirecek ve birkaç ipucu vereceğiz.

Takıldınız mı?

Bu alıştırma sırasında takıldıysanız, bu projenin tam kodu aşağıdadır:

using Newtonsoft.Json; 

var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");

var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
Directory.CreateDirectory(salesTotalDir);   

var salesFiles = FindFiles(storesDirectory);

var salesTotal = CalculateSalesTotal(salesFiles);

File.AppendAllText(Path.Combine(salesTotalDir, "totals.txt"), $"{salesTotal}{Environment.NewLine}");

IEnumerable<string> FindFiles(string folderName)
{
    List<string> salesFiles = new List<string>();

    var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }

    return salesFiles;
}

double CalculateSalesTotal(IEnumerable<string> salesFiles)
{
    double salesTotal = 0;
    
    // Loop over each file path in salesFiles
    foreach (var file in salesFiles)
    {      
        // Read the contents of the file
        string salesJson = File.ReadAllText(file);
    
        // Parse the contents as JSON
        SalesData? data = JsonConvert.DeserializeObject<SalesData?>(salesJson);
    
        // Add the amount found in the Total field to the salesTotal variable
        salesTotal += data?.Total ?? 0;
    }
    
    return salesTotal;
}

record SalesData (double Total);