#c#
Вопрос:
Я хотел бы получить значок имени всего класса из fontawesome в список или массив на c# из fontawesome. Я хотел бы получить значок всех вариантов, например:
fas fa-abacus
far fa-abacus
fal fa-abacus
...
Я попытался извлечь его из css-файла, но он получает только сами имена значков без префиксов.
var text = File.ReadAllText(@"fontawesomeall.css");
var allMatches = Regex.Matches(text, @"^.fa-(.*):", RegexOptions.Multiline);
Спасибо за помощь.
Monika
Ответ №1:
public List<string> ListOfFontAwesomeIcons(string FilePath)
{
List<string> response = new List<string>();
List<string> fontAwesomePrefixes = new { "fas", "far" /*manually add all prefixes*/ }
var textLines = File.ReadAllLines($"{FilePath}");
foreach(string l in textLines)
{
foreach(string p in fontAwesomePrefixes)
{
if(l.Contains(p))
response.Add(l.Replace($"{p} "));
}
}
return response;
}
Комментарии:
1. К сожалению, это не работает, потому что файл all.css не содержит информации о доступном префиксе для значка.
2. @monika-115 покажите мне этот файл, я понял, что это в вашем примере
3. Вам нужно будет вручную добавить информацию о префиксе в переменную fontAwesomePrefixes. Вы должны быть в состоянии определить их, быстро просмотрев файл css или документацию FontAwesome. У них не так много префиксов.
4. Проблема в том, что шрифт некоторых значков имеет не все префиксы.
Ответ №2:
Я запустил это в C# 9, VS2019, просто на основе подачи тестовой строки, и это сработало для меня. Я дважды проверил наличие fa-
в списке результатов, чтобы убедиться, что исключил все остальные результаты.
Кроме того, я только что преобразовал список строк для отображения. На самом деле вам не нужно этого делать, в зависимости от того, что вы делаете со своими результатами.
ИЗМЕНИТЬ: Код обновлен, чтобы отразить файл .css FA, доступный на их веб-сайте, а не формат строки, которую я использовал ранее.
Замените путь в первой строке тем, что отражает ваш проект. Обратите внимание, что существуют более быстрые методы, чем ReadAllText, но для этого все должно быть в порядке.
string text = System.IO.File.ReadAllText("./wwwroot/css/all.css");
var allMatches = Regex.Matches(text, "(?<=[.]).*?(fa-)?.*?(?=[:])", RegexOptions.None);
List<string> allMatchesStrings = new();
foreach (var item in allMatches)
{
if (item.ToString().Contains("fa-"))
allMatchesStrings.Add(item.ToString());
}
foreach (var item in allMatchesStrings)
{
Console.WriteLine(item);
}
Комментарии:
1. Хорошо, хорошо, в случае такой строки все работает. Проблема в том, что fontawesome нигде не предоставляет ничего похожего на строку, которую вы написали.
2. Вы можете просто прочитать файл css в виде строки или манипулировать/читать его по мере необходимости. Главное, что я хотел показать, — это выражение регулярного выражения и
.Contains("fa-"))
логика. Я обновлю свой ответ, чтобы включить часть кода для чтения файла позже, когда у меня будет больше времени.3. Попробуйте обновить код. Должен соответствовать all.css на веб-сайте FA. Пожалуйста, проголосуйте/отметьте как правильное, если это решит вашу проблему.