Alıştırma - Dosyalardaki verileri okuma ve dosyalara veri yazma
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
Terminali kullanarak Projeye Newtonsoft.Json ekleyin.
dotnet add package Newtonsoft.Json
Satış verilerine hazırlanma
öğesinin
Program.csen üstüne ekleyinusing Newtonsoft.Json:using Newtonsoft.Json;Program.csyöntemininFindFilesdoğrudan altında,recordverilerini modelleyen yeni bir ekleyin:record SalesData (double Total);
Satış toplamlarını hesaplayan bir yöntem oluşturma
içinde
Program.cs, önceki adımda eklediğiniz satırın hemen öncesinderecord, satış toplamını hesaplayan yeni bir işlev oluşturun. Bu metot, yinelemeli işlem yapmak üzere dosya yoluIEnumerable<string>değerlerini almalıdır.double CalculateSalesTotal(IEnumerable<string> salesFiles) { double salesTotal = 0; // READ FILES LOOP return salesTotal; }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ındakisalesTotaldeğ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
Program.csdosyasında, çağrınınCalculateSalesTotalhemen üstüneFile.WriteAllTextiş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
Program.csdosyasındakiFile.WriteAllTextbloğunu,salesTotaldeğişkeninin değerini totals.txt dosyasına yazmak için değiştirin. Bunu yaparken, dosyadakiFile.WriteAllTexthiçbir şeyin üzerine yazılmaması içinFile.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}");Ctrl+SCmd+S / tuşlarına basarak Program.cs dosyasını kaydedin.
Programı çalıştırma
Programı terminalden çalıştırın:
dotnet runProgramın herhangi bir çıkışı yoktur. salesTotalDir/totals.txt dosyasına bakarsanız, sales.json dosyasındaki tüm satışların toplamını bulursunuz.
Programı terminalden tekrar çalıştırın.
dotnet runsalesTotalDir/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);