Как сохранить двумерный массив (объявляю как [,]
) в .txt
файл как он есть? В матрице или бинарном видe — точно не знаю пока, как правильно.
Не слишком эффективно, зато удобно, что в одну строку
File.WriteAllText("array.txt", string.Concat(array.Cast<string>().Select((s, i) => s + ((i+1) % array.GetLength(1) == 0 ? "\n" : " "))));
Код полностью: https://ideone.com/eyPvJM
using System;
using System.Linq;
public class Test
{
static void Main(string[] args)
{
string[,] array = { { "aaa", "bbb", "ccc" }, { "q", "w", "e" } };
//System.IO.File.WriteAllText("array.txt",
Console.Write(
string.Concat(array.Cast<string>().Select(
(s, i) => s + ((i+1) % array.GetLength(1) == 0 ? "\n" : " ")
))
);
}
}
static void Main(string[] args)
{
string[,] array =
{
{ "а", "б", "в"},
{ "г", "д", "е"}
};
string fileName = @"D:\array.txt";
WriteToFile(array, fileName);
Console.ReadLine();
}
private static void WriteToFile(string[,] array, string fileName)
{
StringBuilder output = new StringBuilder();
for (int row = 0; row < array.GetLength(0); row++)
{
for (int column = 0; column < array.GetLength(1); column++)
{
output.Append($"{array[row, column]}|");
}
output.Append(Environment.NewLine);
}
try
{
System.IO.File.WriteAllText(fileName, output.ToString());
}
catch (Exception ex)
{
Debug.WriteLine($"<--Ошибка записи в файл: {ex.Message}");
}
}
Подключаете к проекту nuget-пакет Json.Net.
Пишете:
File.WriteAllText(filename, JsonConvert.SerializeObject(arr));
arr
- ваш массив.
Не забудьте указать пространства имён:
using Newtonsoft.Json;
using System.IO;
Еще один вариант для любителей Linq, должен быть более эффективен, чем в этом ответе за счет отсутствия сложения строк, но более трешовый:
string[,] array = { { "aaa", "bbb", "ccc" }, { "q", "w", "e" } };
Console.WriteLine(
string.Join("\n",
Enumerable.Range(0, array.GetLength(0))
.Select(y => string.Join(" ",
Enumerable.Range(0, array.GetLength(1))
.Select(x => array[y, x]))))
);
Идея заключается в том, что с помощью генераторов Enumerable.Range
мы получаем все пары индексов массива, а потом по ним собираем строки с помощью string.Join
.
Никогда так не пишите!
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Здравствуйте! При попытке установить ValueMember для ComboBox в потоке получаю следующую ошибку:
Здравсвуйте, хотелось создать абстрактный слой доступа к данным используя проекты типа NetStandart 20