На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Преобразование файла , Текстовый файл в талицу
    Уважаемые форумчане подскажите такой вопрос,
    имеется файл iplir.conf (конфигурационный файл VipNet) например такой:
    Скрытый текст

    #commentary
    [id]
    id= 0x1a0e000d
    name= координатор2
    filterdefault= pass
    ip= 192.0.2.9
    ip= 192.0.2.10
    tunnel= 192.0.2.201-192.0.2.202 to 192.0.2.201-192.0.2.202
    firewallip= 192.0.2.11
    port= 55777
    proxyid= 0x00000000
    usefirewall= off
    fixfirewall= off
    virtualip= 203.0.113.1
    version= 3.0-670

    #commentary
    [id]
    id= 0xffffffff
    name= Encrypted broadcasts
    filterdefault= drop
    filterudp= 137, 137, pass, any
    filterudp= 138, 138, pass, any
    filterudp= 68, 67, pass, any
    filterudp= 67, 68, pass, any
    filterudp= 2046, 0-65535, pass, recv
    filterudp= 2046, 2046, pass, send
    filterudp= 2048, 0-65535, pass, recv
    filterudp= 2050, 0-65535, pass, recv
    filterudp= 2050, 2050, pass, send

    [id]
    id= 0xfffffffe
    name= Main Filter
    filterdefault= pass

    [id]
    id= 0x1a0e000b
    name= administrator
    filterdefault= pass
    ip= 192.0.2.55
    accessip= 203.0.113.2
    firewallip= 192.0.2.6
    port= 55777
    proxyid= 0xfffffffe
    dynamic_timeout= 0
    usefirewall= on
    virtualip= 203.0.113.2
    version= 3.2-672

    [id]
    id= 0x1a0e000c
    name= [comment] client1
    filterdefault= pass
    ip= 192.0.2.7
    accessip= 203.0.113.3
    firewallip= 192.0.2.8
    port= 55777
    proxyid= 0xfffffffe
    dynamic_timeout= 0
    usefirewall= on
    virtualip= 203.0.113.3
    version= 0.3-2

    [id]
    id= 0x1a0e000a
    name= coordinator1
    filterdefault= pass
    ip= 192.0.2.51
    ip= 192.0.2.3
    accessip= 203.0.113.4
    tunnel= 192.0.2.100-192.0.2.200 to 192.0.2.100-192.0.2.200
    firewallip= 192.0.2.4
    port= 55777
    proxyid= 0x00000000
    usefirewall= off
    virtualip= 198.51.100.4
    version= 3.0-670

    [adapter]
    name= eth1
    ip= 192.0.2.9
    allowtraffic= on
    type= internal

    [adapter]
    name= eth0
    ip= 192.0.2.10
    allowtraffic= on
    type= external

    [dynamic]
    dynamic_proxy= off
    firewallip= 192.0.2.11
    port= 55777
    forward_id= 0x00000000
    always_use_server= off
    timeout= 25

    [misc]
    packettype= 4.1
    timediff= 7200
    warnoldautosave= on
    client_pollinterval= 300
    server_pollinterval= 900
    iparponly= off
    ifcheck_timeout= 30
    ipforwarding= on
    iscaggregate= on
    msg_compress_level= 9
    mssdecrease= 0
    ciphertype= gost

    [debug]
    debuglevel= 3
    debuglogfile= syslog:daemon.debug

    [servers]
    server= 0x1a0e000a, coordinator1

    [virtualip]
    startvirtualip= 203.0.113.1
    endvirtualip= 203.0.113.4
    maxvirtualip= 203.0.113.254
    ; Do not delete or change the following line!!!
    startvirtualiphash= 0xABCDEF01

    [visibility]
    default= auto


    количество секций [id] может достигать тысячи,
    вопрос :
    как переложить все секции [id] в таблицу
    т.е. текстовую вертикальную запись параметров преобразовать для чтения к такому виду
    Прикреплённый файлПрикреплённый файл111.png (165 байт, скачиваний: 548)
      извините файл пустой оказался
      прикрепляю новый
      Прикреплённый файлПрикреплённый файл222.jpg (132,5 Кбайт, скачиваний: 546)
        Не ужели ни кто не в теме, подскажите кто нибудь, помогите хоть класс набрать под разбор секции
          Цитата kms @
          переложить все секции [id] в таблицу

          Какую таблицу? Конвертировать в табулированные строчки? (column1\tcolumn2\tcolumn3\tcolumn4) экспортировать в БД? (sql или иное) Записать в xls?

          Цитата kms @
          Не ужели ни кто не в теме

          Скорее, тут просто не любят вопросы, которые заключаются в том, чтобы отвечающий написал за вас программу. У вас даже пояснений толковых по поводу вашего вопроса нет...
            Присоединяюсь к предыдушему ораторy. Какой тип таблицы?
            Если нужна HTML таблица то XSLT, наверное, лучший двигатель.
              В какую таблицу без разницы , хоть в DataTAble , хоть в csv ,
              у меня например сделано в dataGridView

              Скрытый текст

              ExpandedWrap disabled
                private void Parsing2tabl()
                        {
                            string text = "";
                 
                            using (StreamReader fs = new StreamReader(textBox1.Text, Encoding.GetEncoding(20866)))
                            {
                                int sID = 0;
                                string[] sP;
                                double number;
                 
                                while (true)
                                {
                                    string temp = fs.ReadLine(); // Читаем строку из файла во временную переменную.
                 
                                    if (temp == null || temp == "[adapter]" ) break; // Если достигнут конец файла, прерываем считывание.
                 
                                    if (temp == "[id]" || temp == "[channel]")// Пишем
                                    {
                                        sID = dataGridView1.Rows.Add();
                                        dataGridView1.Rows[sID].HeaderCell.Value = (sID+1).ToString() ;
                                    }
                 
                                    if (temp != "[id]"   && temp != "" && temp.Substring(0, 1) != "#") {
                                        sP = temp.Split('=');
                                        dataGridView1.Rows[sID].Cells[sP[0].Trim()].Value += sP[1];
                                    }
                              }
                            }
                 
                        }



              но хотелось бы по настоящему классами
              Сообщение отредактировано: kms -
                ExpandedWrap disabled
                  using System;
                  using System.IO;
                  using System.Collections.Generic;
                   
                   
                  namespace Sources {
                   
                      public class ItemID {
                      
                          private IDictionary<string,string> properties;
                      
                          public ItemID(int id, IDictionary<string,string> properties){
                              this->properties = properties;
                              this->ID         = id;
                          }
                      
                          public int ID { get; set; }
                          
                          public string GetValue(string propertyName){
                              return this->properties[propertyName];
                          }
                          
                          public IDictionary<string,string> ToMap() {
                              return this->properties;
                          }
                          
                      }
                      
                      public class ParseHandler {
                      
                          public static IList<ItemID> ReadIds(string filename){
                              IList<ItemID> result = new List<ItemID>();
                              
                              using (StreamReader stream = new StreamReader(filename, Encoding.GetEncoding(20866))) {
                              
                                  string tmp;
                                  
                                  for(;;){
                                  
                                      if((tmp = stream.ReadLine())==null){
                                          break;
                                      }
                                  
                                      if(!tmp.contains("[id]")){
                                          continue;
                                      }
                                      
                                      IDictionary<string,string> properties = new Dictionary<string,string>();
                                      
                                      for(;;){
                                      
                                          if((tmp = stream.ReadLine())==null || tmp.trim().length==0){
                                              int id = int.Parse(properties["id"]);
                                              result.add(new ItemID(id, properties));
                                              break;
                                          }
                                          
                                          if(!tmp.contains("=")){
                                              throw Exception("Синтаксическая ошибка: '"+tmp+"'!");
                                          }
                                          
                                          string[] data = tmp.split('=');
                                          string fieldName  = data[0].trim();
                                          string fieldValue = data[1].trim();
                                          properties[fieldName] = fieldValue;
                                          
                                      }
                                  
                                  }
                   
                              }
                              
                              return result;
                          
                          }
                      
                      }
                   
                  }



                Соответственно, использовать можно так:

                ExpandedWrap disabled
                  foreach(ItemID item in ParseHandler.ReadIds("config_name.cfg")) {
                   foreach(string field in item.ToMap().Keys){
                    System.Console.WriteLine(filed+"="+item.GetValue(field)+", ");
                   }
                   System.Console.WriteLine("\n");
                  }
                Сообщение отредактировано: VisualProg -
                  VisualProg что то пошло не так
                    Вообщем как то домучил этот вопрос если кому интересно исходники тут
                      где ? )))
                        Извиняюсь https://github.com/vovakms/ParserVipNet
                        Прикреплённый файлПрикреплённый файлr1.png (75,78 Кбайт, скачиваний: 529)

                        Добавлено
                        файлик pscp.exe должен, лежать рядом с "Парсером" , я вместо dll-ки подключил exe-шник (утилитка копирования с файловой системы ext3/ext4)
                        Сообщение отредактировано: kms -
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0407 ]   [ 21 queries used ]   [ Generated: 28.03.24, 10:11 GMT ]