На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: maxim84_, juice
  
> Преобразование файла, Текстовый файл в талицу
Уважаемые форумчане подскажите такой вопрос,
имеется файл 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 байт, скачиваний: 15)
извините файл пустой оказался
прикрепляю новый
Прикреплённый файлПрикреплённый файл222.jpg (132,5 Кбайт, скачиваний: 24)
Не ужели ни кто не в теме, подскажите кто нибудь, помогите хоть класс набрать под разбор секции
Цитата kms @
переложить все секции [id] в таблицу

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

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

Скорее, тут просто не любят вопросы, которые заключаются в том, чтобы отвечающий написал за вас программу. У вас даже пояснений толковых по поводу вашего вопроса нет...
CyberLock | BloodBath-LAN
Немного творчества - альбом ArtMetal [Metal, Instrumental, Orchestral]
Присоединяюсь к предыдушему оратор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 -
CyberLock | BloodBath-LAN
Немного творчества - альбом ArtMetal [Metal, Instrumental, Orchestral]
VisualProg что то пошло не так
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,1114 ]   [ 24 queries used ]   [ Generated: 23.05.18, 22:20 GMT ]