Я пытаюсь проанализировать файл INI и взять конкретные пары клавиш, учитывая имя раздела и имя ключа. Я использую следующий код, используя LINQ, и он работает, если я не включаю ключевое имя в его поиск, но возвращаю пустой список, если я сделаю.[INSTANCES]
NUMVTC=3
VTC=0,3330,ABCD,DESCR0
VTC=1,3331,EFGH,DESCR1
VTC=2,3332,IJKL,DESCR2
< /code>
Частичный код для анализа файла < /p>
List vals = File.ReadLines(sMappingFilePath)
.SkipWhile(line => !line.StartsWith("[instances]",
StringComparison.CurrentCultureIgnoreCase))
.Skip(1)
.TakeWhile(line => !string.IsNullOrEmpty(line) && line.StartsWith("vtc", StringComparison.CurrentCultureIgnoreCase)) // The "vtc" portion breaks it
.Select(line => new IniEntry(line.Split('=')[0], line.Split('=')[1])).ToList();
public class IniEntry
{
public string Key { get; set; }
public string Value { get; set; }
public IniEntry(string key, string val) {
Key = key;
Value = val;
}
}
Если я удалю часть, в которой говорится «line.startswith (« vtc »...», она работает и возвращает все пары клавишных значений, включая numvtc = 3, который я хочу пропустить. /> update < /strong> < /p>
Я изменил код на основе предложений и комментариев и попал в общую функцию, которая принимает путь .ini файла, имя раздела и имя ключа и список возврата на объектах Inientry. < /p>
public static List GetIniSectionDataList(string sIniFilePath, string sSection, string sKey)
{
List ls = new List();
if (string.IsNullOrEmpty(sIniFilePath))
{
return ls;
}
// In case your enters **[blah** , or **blah]**
sSection = sSection.Replace("[", string.Empty).Replace("]", string.Empty);
sSection = "[" + sSection + "]";
ls = File.ReadLines(sIniFilePath)
.SkipWhile(line => !line.StartsWith(sSection, StringComparison.CurrentCultureIgnoreCase))
.Where(line => line.StartsWith(sKey, StringComparison.CurrentCultureIgnoreCase))
//.Skip(1)
.TakeWhile(line => !string.IsNullOrEmpty(line))
.Select(line => new IniEntry(line.Split('=')[0], line.Split('=')[1]))ToList();
return ls;
}
< /code>
Я называю его с помощью: < /p>
List vals = TCLogFile.GetIniSectionDataList(sMappingFilePath, "instances", "vtc");
Подробнее здесь: https://stackoverflow.com/questions/796 ... using-linq
Файл SARSING .INI с использованием LINQ ⇐ C#
Место общения программистов C#
1749572357
Anonymous
Я пытаюсь проанализировать файл INI и взять конкретные пары клавиш, учитывая имя раздела и имя ключа. Я использую следующий код, используя LINQ, и он работает, если я не включаю ключевое имя в его поиск, но возвращаю пустой список, если я сделаю.[INSTANCES]
NUMVTC=3
VTC=0,3330,ABCD,DESCR0
VTC=1,3331,EFGH,DESCR1
VTC=2,3332,IJKL,DESCR2
< /code>
Частичный код для анализа файла < /p>
List vals = File.ReadLines(sMappingFilePath)
.SkipWhile(line => !line.StartsWith("[instances]",
StringComparison.CurrentCultureIgnoreCase))
.Skip(1)
.TakeWhile(line => !string.IsNullOrEmpty(line) && line.StartsWith("vtc", StringComparison.CurrentCultureIgnoreCase)) // The "vtc" portion breaks it
.Select(line => new IniEntry(line.Split('=')[0], line.Split('=')[1])).ToList();
public class IniEntry
{
public string Key { get; set; }
public string Value { get; set; }
public IniEntry(string key, string val) {
Key = key;
Value = val;
}
}
Если я удалю часть, в которой говорится «line.startswith (« vtc »...», она работает и возвращает все пары клавишных значений, включая numvtc = 3, который я хочу пропустить. /> update < /strong> < /p>
Я изменил код на основе предложений и комментариев и попал в общую функцию, которая принимает путь .ini файла, имя раздела и имя ключа и список возврата на объектах Inientry. < /p>
public static List GetIniSectionDataList(string sIniFilePath, string sSection, string sKey)
{
List ls = new List();
if (string.IsNullOrEmpty(sIniFilePath))
{
return ls;
}
// In case your enters **[blah** , or **blah]**
sSection = sSection.Replace("[", string.Empty).Replace("]", string.Empty);
sSection = "[" + sSection + "]";
ls = File.ReadLines(sIniFilePath)
.SkipWhile(line => !line.StartsWith(sSection, StringComparison.CurrentCultureIgnoreCase))
.Where(line => line.StartsWith(sKey, StringComparison.CurrentCultureIgnoreCase))
//.Skip(1)
.TakeWhile(line => !string.IsNullOrEmpty(line))
.Select(line => new IniEntry(line.Split('=')[0], line.Split('=')[1]))ToList();
return ls;
}
< /code>
Я называю его с помощью: < /p>
List vals = TCLogFile.GetIniSectionDataList(sMappingFilePath, "instances", "vtc");
Подробнее здесь: [url]https://stackoverflow.com/questions/79660723/parsing-ini-file-using-linq[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия