2014-01-29 2 views
0

Я «новый» начинающий в C#, а при выполнении моего проекта я получаю одну проблему, которую я не могу решить с моими знаниями. Я много стараюсь, но это доцент для меня, поэтому я надеюсь, что смогу помочь.ReadValue от INI File

public void ReadValue() 
{ 
    foreach(string cat in this.ini.iniGetCategories()) 
    { 
    textbox1.Text = string.Join(Environment.NewLine , this.ini.iniGetCategories()) + Environment.NewLine + string.Join(Environment.NewLine, this.ini.iniReadValue(cat,"Key"); 
    } 
} 

this.ini.iniGetCategories() - читает все разделы из моего INI - отлично работает

this.ini.iniReadValue(string Section, string Key) - считывает значение из ключа из Секции

Основная проблема в том, что она дает мне весь раздел - имена, но это дает мне только последний ключ + значение из моего ИНИ и игнорирует другой код

29.01.2014 - 10.00 На самом деле, код, который дает мне только «1 раздел + 1 значение». Другой по-прежнему не хватает ...

StringBuilder strbuild1 = new StringBuilder(); 


      foreach (string cat in this.ini.IniGetCategories()) 
      { 
       strbuild1.Append(cat + Environment.NewLine); 

       foreach (string ccat in this.ini.IniGetCategories()) 
       { 
        strbuild1.Append(this.ini.IniReadValue(ccat, "Betreff")); 
       } 
      } 

      textBox1.Text = strbuild1.ToString(); 
+0

@Schrader ваш внутренний цикл не должен перебирать категории, а над клавишами. Поскольку это ваш проект, я полагаю, вы сами написали эти методы? Вам понадобится, например. метод 'public List ReadKeys (строка)' –

+0

@WimOmbelets Теперь мой внутренний цикл проходит мой метод this.ini.iniGetKeys' Я добавляю обе петли в свой 'Stringbuilder', но, наконец, снова получаю одно значение ... И мне нужно только значение из одного ключа «Betreff» – Schrader

ответ

1

вашего foreach цикла будет назначать textbox1.Text каждый раз, так что это совершенно нормально, что в this.ini.iniGetCategories() только последний cat будет использоваться для назначения извлеченного значения в TextBox.

Если я правильно предполагая, что вы хотели бы иметь все имена категорий в этом TextBox, вы бы сначала построить String (с использованием либо += оператора или, предпочтительно, используя StringBuilder класс и только ПОСЛЕ объем концов петли на foreach вы затем назначить эту строку в Text свойства вашего TextBox

простой и читаемый способ для достижения этой цели, состоит в использовании двойных вложенных циклов

общая идея:.. для каждый раздел в наборе разделов, то f или каждый ключ в наборе ключей для этого конкретного раздела.

+0

Я делаю 'foreach' для своих разделов и один' foreach' для чтения ключа и 'append', а затем для' Stringbuilder' . Но теперь я получаю только first Value ... – Schrader

+0

@Schrader, пожалуйста, разверните свой вопрос, чтобы также показать код, который вы пробовали последним –

+0

. Я добавляю свой код на мой вопрос ... – Schrader

0

Как отметил Вим с помощью оператора +=, ваш случай полезен.

public void ReadValue() 
{ 
    foreach(string cat in this.ini.iniGetCategories()) 
    { 
    textbox1.Text += string.Join(Environment.NewLine , this.ini.iniGetCategories()); 
    textbox1.Text += string.Join(Environment.NewLine, this.ini.iniReadValue(cat,"Key"); 
    } 
} 
+0

Работайте, НО это только дает мне снова «Значение» одного «Раздела» И мне нужно получить для всех «Разделов» значение «Ключ» – Schrader

+1

, вам нужно будет перевернуть каждую клавишу в для каждого раздела: это кричит вложенные циклы. Я исправил свой ответ. –

0

Извините за бесстыдный плагин, но я хотел бы представить IniParser, созданную мной библиотеку. Лицензия MIT (может использоваться даже в проприетарном коде) Написанная в C# w/out внешние привязки, поэтому она не содержит зависимостей в любой ОС, что делает ее совместимой с Mono.

Вы можете check out the source in GitHub, и это also available as a NuGet package

Это heavily configurable и really simple to use.

Надеюсь, это может помочь любому, кто пересматривает этот ответ.

Смежные вопросы