Дан файл с текстом на русском языке. Подсчитать, сколько слов начинается с указанной буквой. Результат записать в отдельный файл
Написал рабочую программу, но почему то она не хочет работать с русским языком, вместо слов выдает вопросики, с английскими символами все работает отлично. Пробовал вместо Encoding.Default писать Encoding.GetEncoding(1251), но VS выдавала "no data is available for encoding 1251"
static void Main(string[] args)
{
string inPath = "path";
Console.WriteLine();
Console.WriteLine("Содержимое входного файла - " + inPath);
Console.WriteLine("Введите букву");
char c = Convert.ToChar(Console.ReadLine());
int count = 0;
string text = System.IO.File.ReadAllText(@"path", Encoding.Default);
string[] tx = text.Split(' ');
for (int i = 0; i < tx.Length; i++)
{
Console.WriteLine(tx[i]);
}
for (int i = 0; i < tx.Length; i++)
{
char[] ch = tx[i].ToCharArray();
if (ch[0] == c)
count++;
}
StreamWriter sw = new StreamWriter("path output");
sw.WriteLine(+count);
sw.Close();
Console.WriteLine("Количество слов начинающихся с '{0}' = {1}", c, count);
Console.ReadKey();
}
Ответы (1 шт):
Автор решения: MRXIT
→ Ссылка
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Application
{
internal sealed class Core
{
private static async Task Main()
{
try
{
char? letterUser = null;
while (true)
{
Console.Write("Enter letter: ");
letterUser = Console.ReadLine()?[0];
if (letterUser is not null)
break;
}
string[] bufferData = (await FileWorkExtensions.ReadFromFile(FileWorkExtensions.GetPathApplication("data.txt"))).Split(' ');
if (bufferData.Length == 0)
throw new FileLoadException(nameof(bufferData));
int countFindLetter = 0;
for (int index = 0; index < bufferData.Length; index++)
{
if (bufferData[index].StartsWith((char)letterUser))
countFindLetter++;
}
Console.WriteLine($"Find letters: {countFindLetter}");
Console.ReadLine();
}
catch (Exception exception)
{
Console.WriteLine($"Message: {exception.Message}\nStack: {exception.StackTrace}");
Console.ReadLine();
Environment.Exit(0);
}
}
}
internal static class FileWorkExtensions
{
public static async Task WriteToFile(string pathName, string data, CancellationToken cancellationToken = default)
{
if (string.IsNullOrEmpty(pathName))
throw new ArgumentNullException(nameof(pathName));
using (FileStream fileStream = new FileStream(pathName, FileMode.OpenOrCreate))
{
fileStream.Seek(0, SeekOrigin.End);
await fileStream.WriteAsync(Encoding.Default.GetBytes(data).AsMemory(0, data.Length), cancellationToken);
}
}
public static async Task<string> ReadFromFile(string pathName, CancellationToken cancellationToken = default)
{
if (string.IsNullOrEmpty(pathName))
throw new ArgumentNullException(nameof(pathName));
byte[] buffer;
using (FileStream fileStream = new FileStream(pathName, FileMode.OpenOrCreate))
{
buffer = new byte[fileStream.Length];
await fileStream.ReadAsync(buffer.AsMemory(0, buffer.Length), cancellationToken);
}
return Encoding.Default.GetString(buffer, 0, buffer.Length);
}
public static string GetPathApplication(string fileName)
{
string applicationDomainDirectory = AppDomain.CurrentDomain.BaseDirectory;
return Path.Combine(applicationDomainDirectory, fileName);
}
}
}
Файл data.txt сохранить в формате UTF8