Как провести чтение, сортировку и сохранение данных из тестового файла
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как провести чтение, сортировку и сохранение данных из тестового файла

Как провести чтение, сортировку и сохранение данных из тестового файла

Ответ
Поиск в этой теме
Непрочитано 12.09.2013, 23:24 #1
Как провести чтение, сортировку и сохранение данных из тестового файла
h6784rfg6
 
Регистрация: 12.09.2013
Сообщений: 24

Подскажите, пожалуйста, как решить следующую задачу:

Есть файл, содержащий текстовые данные. Все данные разделены по типам (например, текст, дуга, многоугольник). Название типа сопровождено определенным знаком – например <. После названия типа следует повторяющееся кол-во параметров. Далее идет пробел и новый элемент/блок. Все данные перемешаны (Блоки одинаковых типов данных не идут один за другим).
Имеется следующая задача :

Надо вчитать файл в память и проанализировать. Надо пройти все строки файла таким образом:

- При обнаружении названия типа данных (например - <текст) надо создать новый элемент массива структур текст и дальнейшими строчками заполнить параметры этого элемента. Такими параметрами могут быть: положение, номер, ширина, и т.д. При этом каждый параметр находится на новой строчке – порядок параметров не меняется.

Подскажите, как провести такой анализ средствами языка VB.NET. Я новичок, но создать массив структур определенного типа и приписать им значения смог бы (с грехом пополам), но вот провести такой анализ не умею, хоть убей.
Как дополнение скажу, что созданные и заполненные таким образом массивы структур будут применяться для создания определенного чертежа в AutoCAD. Я проштудировал создание элементов AutoCAD, так что смогу, надеюсь, потом использовать сохраненные данные при вызове нужных функций библиотеки ObjectARX.
Просмотров: 9302
 
Непрочитано 12.09.2013, 23:57
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от h6784rfg6 Посмотреть сообщение
Есть файл, содержащий текстовые данные. Все данные разделены по типам (например, текст, дуга, многоугольник). Название типа сопровождено определенным знаком – например <.
Что мешает сразу выложить файл? DXF - тоже текстовый файл. Судя по логину, регистрация для разового обращения на форум?
Цитата:
Сообщение от h6784rfg6 Посмотреть сообщение
провести такой анализ не умею, хоть убей.
Кто-то мешает научиться?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 13.09.2013, 00:07
#3
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Могу вставить) Кстати, у тебя тоже ничего так логин)
Вложения
Тип файла: zip S-Bahn.zip (60.2 Кб, 59 просмотров)
h6784rfg6 вне форума  
 
Непрочитано 13.09.2013, 01:17
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Попробуй сначала в консольном приложении:
Код:
[Выделить все]
       public static void ReadSBahn()
       {
           string fileName=@"C:Test\...\S-Bahn.rvx";
           List<string> myList = new List<string>();
           List<List<string>> myData = new List<List<string>>();
           FileStream MyFileStream = null;
           StreamReader MyReader = null;
           MyFileStream = new FileStream(fileName, FileMode.Open);
          
           MyReader = new StreamReader(MyFileStream);
           
           MyReader.BaseStream.Position = 0;
           while (!MyReader.EndOfStream)
           {
               String myString = MyReader.ReadLine();
               // reads data into an array & outputs data to console

               string[] myArray = myString.Split('>');
               myList = new List<string>();
               //just to display a headers:
               //if (myArray.Length>1)
               //Console.WriteLine("{0}\t{1}", myArray[0].ToString(), myArray[1].ToString());
               //to display all items:
               for (int i = 0; i < myArray.Length; i++)
               {
                   myList.Add(myArray[i].ToString());
                   //Console.WriteLine("{0}\t", myArray[i].ToString());
               }

               myData.Add(myList);

       
           }
           foreach (List<string> item in myData)
           {
               // parse every item and pass them in AutoCAD
               Console.WriteLine("{0}\t", item[0].ToString());
           }
           Console.WriteLine();
       }
Олег (jr.) вне форума  
 
Непрочитано 13.09.2013, 11:19
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от h6784rfg6 Посмотреть сообщение
Я новичок, но создать массив структур определенного типа и приписать им значения смог бы (с грехом пополам), но вот провести такой анализ не умею, хоть убей.
Я 8 раз прочитав так и не понял, что у тебя вызывает затруднения.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.09.2013, 12:36
#6
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Я не могу пройти файл строчка за строчкой и приписать значения( Надо чтобы при нахождении определенного блока последующие n строк были записаны как новый элемент массива структуры) Вот это не могу
h6784rfg6 вне форума  
 
Непрочитано 13.09.2013, 13:00
#7
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


откуда такой формат файла?
gomer вне форума  
 
Непрочитано 13.09.2013, 13:41
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


@h6784rfg6,
Я пока воздержусь от продолжительных матов в адрес автора обозначенного формата... Во всяком случае до того времени, как ты ответишь на вопрос #7. Так же интересует, что помешало автору формата воспользоваться DXF или XML?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 13.09.2013, 13:47
#9
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Точно не знаю, откуда взялся этот формат. Мне дали файл и сказали импортировать данные из него в автокад. Так что все претензии к аффтару формата))
h6784rfg6 вне форума  
 
Непрочитано 13.09.2013, 13:58
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от h6784rfg6 Посмотреть сообщение
Точно не знаю, откуда взялся этот формат. Мне дали файл и сказали импортировать данные из него в автокад.

- При обнаружении названия типа данных (например - <текст) надо создать новый элемент массива структур текст и дальнейшими строчками заполнить параметры этого элемента. Такими параметрами могут быть: положение, номер, ширина, и т.д. При этом каждый параметр находится на новой строчке – порядок параметров не меняется.
Понятно. Если случится встреча с автором - натяни ему глаз на ж@пу и попутно расскажи о существовании XML.

Теперь по поводу твоего вопроса:

Насколько я тебя понял, ты хочешь редактировать обозначенный файл, добавляя в него новые "элементы", а не вычерчивать на его основе что-то в AutoCAD. Работать непосредственно с тем гуаном, которое тебе прислали - не советую, лучше преобразовать данные в удобоваримый "стандартный" формат и работать с ними, после чего результат обратно превращать в гуано. Парсить этот "формат" очень просто: построчно считываешь текст и анализируешь на наличие ">" или "=". Результат преобразуешь в объектную модель LINQ to XML и жанглируешь им так, как тебе нужно: добавляешь\удаляешь элементы XElement и XAttribute, меняешь их местами и т.п. (чего душе угодно). Затем, когда создашь нужную тебе структуру, выполняй обратное действо: из XML данные записываешь в твой "формат".

Всё просто до безобразия, однако если бы у автора "формата" руки росли не из ж@пы, то тебе не пришлось бы заниматься ненужным парсингом и переформатированием, т.к. ты сразу работал бы непосредственно с XML, средствами обозначенной мною выше .net технологии (или любой другой, предназначенной для работы с XML).

P.S. Кодом из #4 увлекаться не рекомендую, в виду наличия в нём изрядного количества ошибок (да и вообще там какая-то муть написана). Сразу же, что бросилось в глаза:
1. Утечка памяти в виду не освобождения ранее взятых ресурсов, т.е. отсутствие следующих вызовов:
Код:
[Выделить все]
MyReader.Close();
MyReader.Dispose();
MyFileStream.Close();
MyFileStream.Dispose();
Поскольку блоки using для обозначенных объектов в коде не присутствуют.

2. Отсутствие обработки пустых строк, коих в файле предостаточно, в виду чего в список попадает большое количество ненужных "пустышек".

3. Это полнейшая муть:
Код:
[Выделить все]
string[] myArray = myString.Split('>');
myList = new List<string>();
//just to display a headers:
//if (myArray.Length>1)
//Console.WriteLine("{0}\t{1}", myArray[0].ToString(), myArray[1].ToString());
//to display all items:
for (int i = 0; i < myArray.Length; i++)
{
	myList.Add(myArray[i].ToString());
	//Console.WriteLine("{0}\t", myArray[i].ToString());
}
Подумай, что будет при обработки ">RAHMEN" (или любой др. подобной) и всех прочих подобных строк (какие элементы будут добавлены в список)? Добавление в список новых, собственно ручно сгенерированных "пустышек".

4. В коде нет обработки, отделяющей имя свойства от его значения.

5. В основе всего должно лежать логическое обоснование: я не знаю, с какой целью автор разместил табуляцию в коде:
Код:
[Выделить все]
 Console.WriteLine("{0}\t", item[0].ToString());
На визуальное форматирование она никакого влияния не оказывает (в данном примере).

6. Нахрена там вообще список списков (вопрос риторический)? Тот же самый результат, предоставленный автором кода, можно получить ограничившись и всего лишь одним списком. Я ещё понимаю, если бы каждый набор записей был записан в виде записи словаря, т.е. однозначно идентифицирован, дабы можно было работать с конкретной, чётко определённой группой записей. Однако то, что по факту сделано в коде #4 - это муть.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 13.09.2013 в 15:31. Причина: добавил комментарии о качестве кода из #4
hwd вне форума  
 
Непрочитано 13.09.2013, 15:03
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


В этом файле не все объекты автокадовские, поэтому экспортировать все, не так-то просто. Так что готовьте вазелин.
а алгоритм прост:
Создаете класс, который будет обрабатывать файл.
Создаете в классе контейнер-блок, в который будете скидывать примитивы.
Создайте класс, преобразующий примитивы из файла в примитивы автокада
Создаете функции ввода вывода
Теперь само чтение:
Вначале создаем экземпляр конвертера
Читаем построчно файл, пока не нашли определение примитива, попутно записывая инфу в отдельные свойства.
Читаем построчно примитив пока не нашли другой.
Преобразуем примитив файла в примитив акада, если успешно, то добавляем его в блок
Чистим конвертер
Читаем следующий примитив и так до конца файла
вывод - самое простое, просто вставляем наш блок в чертеж
gomer вне форума  
 
Непрочитано 13.09.2013, 15:40
#12
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от hwd Посмотреть сообщение
Парсить этот "формат" очень просто: построчно считываешь текст и анализируешь на наличие ">" или "=". Результат преобразуешь в объектную модель LINQ to XML и жанглируешь им так, как тебе нужно: добавляешь\удаляешь элементы XElement и XAttribute, меняешь их местами и т.п. (чего душе угодно). Затем, когда создашь нужную тебе структуру, выполняй обратное действо: из XML данные записываешь в твой "формат".
ИХМО данная рекомендация правильно если "твой формат" и есть XML, ну или очень близкий к нему (не столько к формату, а к функционалу жонглировния встроенного в LINQ). Я бы сразу просписал правила "жонглирования" своего формата и парсил в него - зачем лишнее звено?
з.ы. хотя тут я не учел что это VB... - а там с "жонглированием" и описанием формата может оказаться неважно.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.09.2013, 15:48
#13
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
хотя тут я не учел что это VB... - а там с жонглированием может оказаться неважно.
Не VB, а VB.NET - соответственно всё доступно.
Цитата:
Сообщение от Дима_ Посмотреть сообщение
ИХМО данная рекомендация правильно если "твой формат" и есть XML, ну или очень близкий к нему (не столько к формату, а к функционалу жонглировния встроенного в LINQ). Я бы сразу просписал правила "жонглирования" своего формата и парсил в него - зачем лишнее звено?
"Близость\Дальность" к XML здесь роли не играет. Любые данные можно с лёгкостью представить в формате XML (даже двоичные). "Лишнее звено" в данном случае используется для того, чтобы имеющиеся данные можно было бы обрабатывать ПРИВЫЧНЫМИ, "родными" способами (в данном случае LINQ to XML). XML для того и задумывался, чтобы его использовали как УНИВЕРСАЛЬНЫЙ формат хранения\передачи данных. Под этот формат написано много библиотек\технологий. Соответственно, если знаешь хотя бы одну из них, то и не будет нужды изучать "правила жонглирования" сотен вот таких вот "продуманных" приложений.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 13.09.2013, 16:24
#14
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от hwd Посмотреть сообщение
Не VB, а VB.NET - соответственно всё доступно.
Я не уверен (а сказать более сильно сомневаюсь - по крайней мере о таких новшествах не слышал) что он поддерживает создание структур данных произвольного формата с обработкой их как "родных".
Цитата:
Любые данные можно с лёгкостью представить в формате XML (даже двоичные). "Лишнее звено" в данном случае используется для того, чтобы имеющиеся данные можно было бы обрабатывать ПРИВЫЧНЫМИ, "родными" способами (в данном случае LINQ to XML).
Это я понимаю и пишу - самоцитата
Цитата:
ну или очень близкий к нему (не столько к формату, а к функционалу жонглировния встроенного в LINQ)
а если на этом функционале надо писать не меньше (а то и больше) чем под "свою" структуру - то какой в ней смысл.
Цитата:
Соответственно, если знаешь хотя бы одну из них, то и не будет нужды изучать "правила жонглирования" сотен вот таких вот "продуманных" приложений.
Никому изучать мои правила и методы жонглирования не придеться - формат1, переходит в формат2 в "черном ящике" и использования внутри xml или нет никаким образом на результат не влияет. Почему в качестве формата1 и формата2 не использованны стандартные форматы - это другой вопрос. Может просто из-за разгильдяйства и квалификации автора. А может и по объективным причинам - производительность, размер и пр.
Например есть у Вас двоичные данные которые проиндексированны в виде упорядоченного дерева - вы их тоже предложите перевести в XML и жонглировать "стандартными" средставми - нет - если и сохраните (например для переноса куда-либо) в формат XML, то уж поиск-то по дереву точно "соорудите" сами (иначе эффективность его упадет логарифмически) - и возникает вопрос в целесообразности перевода таких данных в XML (один черт придеться писать свои методы которые вызывают тот-же LINQ). Пример в другую крайность - может "его" формат представляет все то-же самое но в другой кодировке + еще пару бантиков - мы этого не знаем - по сему и инструмент надо выбирать по наковальне.

з.ы. я не в коем случае не утверждаю, что XML в варианте автора не подойдет - я про то, что ненужно сразу не подумав пихать "универсальные форматы".
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 13.09.2013 в 16:38.
Дима_ вне форума  
 
Непрочитано 13.09.2013, 16:30
#15
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


думаю проще было бы найти эту автономноненецкую ГИС и экспортировать из нее в dxf,если конечно дело не запахнет палевологией
gomer вне форума  
 
Непрочитано 13.09.2013, 16:41
#16
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Я не уверен (а сказать более сильно сомневаюсь - по крайней мере о таких новшествах не слышал) что он поддерживает создание структур данных произвольного формата с обработкой их как "родных".
Я не понял этой фразы. Что подразумевается под "структурами данных произвольного формата"?
Цитата:
Сообщение от Дима_ Посмотреть сообщение
Может просто из-за разгильдяйства и квалификации автора.
100%
Цитата:
Сообщение от Дима_ Посмотреть сообщение
А может и по объективным причинам - производительность, размер и пр.
Это вряд ли, т.к. и на XML можно написать компактный по объёму контент.
Цитата:
Сообщение от Дима_ Посмотреть сообщение
Например есть у Вас двоичные данные которые проиндексированны в виде упорядоченного дерева - вы их тоже предложите перевести в XML и жонглировать "стандартными" средставми
в данном случае речь о данных, представленных в ТЕКСТОВОМ формате.
Цитата:
Сообщение от Дима_ Посмотреть сообщение
я про то, что ненужно сразу не подумав пихать "универсальные форматы"
Здесь вопрос не столько в "универсальности формата", сколько в "универсальности обработки". Обрабатывать структурированные текстовые данные гораздо удобней тем же LINQ to XML, чем построчно читать текст из потока (stream) и затем выполнять парсинг полученного контента, а потом ещё и заниматься внесением изменений в эти данные, вставляя строки между уже имеющимися, изменяя существующие записи, удаляя лишние и т.п.

В данном случае, заочное приведение данных (в памяти) подобно приведению дробей к единому знаменателю, чтобы получить возможность выполнения сложения. Только в нашем случае мы получаем не возможность сложения, а гибкую возможность модификации\аналитики данных без необходимости написания кучи дополнительного кода, за счёт того, что воспользуемся уже имеющимися технологиями.

P.S. Если всё ещё не понятно о чём я говорю, то можно сделать простое сравнение: ты напиши свой вариант кода, позволяющего модифицировать данные, выше выложенные автором, а я свой. Затем совместно и оценим объём кода и удобство обработки данных с промежуточной конвертацией в XML и без неё, на конкретных примерах кода. Т.к. автор уже слился с темы (посматривает, но ничего не пишет), то кодом лучше будет обменяться через скайп и там же обсудить результаты, т.к. помогать в решении, видя исходники автора и конкретные проблемные моменты в его коде - это одно, а собственно решать за кого-то - это другое (второй вариант мне претит, да и без меня найдутся те, кто с низкого старта рванутся за него всё делать).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 13.09.2013 в 17:27. Причина: добавил P.S.
hwd вне форума  
 
Непрочитано 13.09.2013, 17:16
#17
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Мужики успокойтесь....
Ему уже дали ответ....
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 13.09.2013, 17:28
#18
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>а потом ещё и заниматься внесением изменений в эти данные, вставляя строки между уже имеющимися, изменяя существующие записи, удаляя лишние и т.п.
Надо различать форматы хранения данных и форматы в которых они обрабатываются внутри программы или автокад открыв dxf тоже вставляет строки между имеющимися? Да в xml удобно сохранить (но удобство не в формате, а в том что вокруг него уже написана вся необходимая инфраструктура) какието данные, но это незначит что внутри программы этиже данные обязательно оправдано хранить в нем.
zamtmn вне форума  
 
Непрочитано 13.09.2013, 17:30
#19
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от hwd Посмотреть сообщение
Я не понял этой фразы. Что подразумевается под "структурами данных произвольного формата"?
В ряде языков программирования структуры данных это не внешнее благо, а формы обращения построенные непосредственно самим языком и есть механизмы при которых они будут выглядеть не как внешние объекты (Dicitionary и пр), а так-же как встроенные типа - например массивы. Например в F# полный аналог XML структуры (может я чего упустил - но как-то так) можно задать 3 строками:
Код:
[Выделить все]
 type MyXml=
  |MyNode of string*(string*string) list*MyXml list
  |Val of string*string
ну и пример заполнения (ручной):
MyNode("Root",["version","1.0";"encoding","utf8"],[MyNode("Tree1",[],[Val("1","Раз");Val("2","Два")]);MyNode("tree2",[],[Val("3","ТРИ")])]);;
вернет:
val it : MyXml =
MyNode
("Root",[("version", "1.0"); ("encoding", "utf8")],
[MyNode ("Tree1",[],[Val ("1","Раз"); Val ("2","Два")]);
MyNode ("tree2",[],[Val ("3","ТРИ")])])

Это уже совсем далеко от темы - но в общем парситься после такого представления она (структура) штатными средствами ничуть не хуже чем xml LINQ - хотя конечно если LINQ окажеться за глаза то переписывать его никакого смысла нет.

Цитата:
Сообщение от hwd Посмотреть сообщение
в данном случае речь о данных, представленных в ТЕКСТОВОМ формате.
тут ключевое не двоичные или текстовые данные - а индексированные - при переносе их в XML для поиска по индексу LINQ не поможет (оно про то что они индексированны не знает - а чтоб ему это объяснить надо чуток попрогромировать сверх его "родного" функционала.)

Цитата:
чем построчно читать текст из потока (stream) и затем выполнять парсинг полученного контента, а потом ещё и заниматься внесением изменений в эти данные, вставляя строки между уже имеющимися, изменяя существующие записи, удаляя лишние и т.п.
Такого я не предлогал.

Цитата:
Если всё ещё не понятно о чём я говорю, то можно сделать простое сравнение...
Да все мне пока понятно - еще раз повторю пока не вижу данных во что их надо преобразовывать и по каким правилам - увидив их можно сказать - что в данном случае подойдет больше, но пока их нет говорить а тем более предлагать устроить конкурс (я может тоже посмотря на них - решу что LINQ здесь проще всего) - это что монетку бросить - я уже привел два варианта на которым XML мякго говоря не эффективен.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.09.2013, 17:37
#20
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Надо различать форматы хранения данных и форматы в которых они обрабатываются внутри программы или автокад открыв dxf тоже вставляет строки между имеющимися?
Начиная читать это предложение я воспринимаю это как утверждение, но дочитав до конца, вижу плавный переход к вопросу. Так это вопрос или утверждение? Я различаю форматы хранения и форматы хранения в памяти (вообще это называется сериализацией/десериализацией). Как за кулисами AutoCAD обрабатывает DXF я не в курсе, но предполагаю, что так же выполняют десериализацию в объектный код (правда объекты свои, не XML to LINQ).

Цитата:
Сообщение от zamtmn Посмотреть сообщение
Да в xml удобно сохранить (но удобство не в формате, а в том что вокруг него уже написана вся необходимая инфраструктура
Именно это я и пытаюсь донести до зрителей.

Цитата:
Сообщение от zamtmn Посмотреть сообщение
но это незначит что внутри программы этиже данные обязательно оправдано хранить в нем.
А внутри программы данные и не нужно хранить в формате XML. Внутри программы они десериализуются в объектный код и работа ведётся с объектами, а не с "текстом в формате XML".
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 13.09.2013, 17:40
#21
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от zamtmn Посмотреть сообщение
но это незначит что внутри программы этиже данные обязательно оправдано хранить в нем.
Так внутри программы данные храняться никак не в виде xml - они преобразуються в соответствующие объекты\структуры для эффективной работы.
Offtop: опс. опоздал
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 13.09.2013 в 17:45.
Дима_ вне форума  
 
Непрочитано 13.09.2013, 17:55
#22
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Вся суть этого бесполезного форума - только успешно трепаться языком,
хотя я дал быстрый пример как можно было начать программу,
вместо этого наши загуренные болтуны обсуждают мой чахлый
набросок, молодца, мои поздравления, сходите еще на ciberforum.ru
и объясните там тоже как надо правильно писать, может вам всем слабо
заодно поучить народ на stackoverflow.com?
Олег (jr.) вне форума  
 
Непрочитано 13.09.2013, 17:55
#23
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>А внутри программы данные и не нужно хранить в формате XML. Внутри программы они десериализуются в объектный код и работа ведётся с объектами, а не с "текстом в формате XML".
Что есть объектный код? объекты и типы данных автора программы или объекты XML?
zamtmn вне форума  
 
Непрочитано 13.09.2013, 18:03
#24
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Offtop: Олег (jr.)
НУ здесь то можно понты по колотить....
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 13.09.2013, 18:07
#25
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
хотя я дал быстрый пример как можно было начать программу,
Для меня так и осталось загадкой в чем сложность автора - это к вопросу о том для кого этот код - вначале я пытаюсь понять что нужно - а потом уже от степени трудоемкости, рисую код (пример кода) или нет. Быстро написать абы что последует еще 500 вопросов\просьб "а можно-ли" - и Вам это известно не меньше меня. Ну а возникший диалог между мной и hwd хоть и являеться побочным в некоторой степени, но уверен для кого-то и полезный - просто у нас с ним подходы немного разные (у каждого в силу своей испорченности) - но оба вполне жизнеспособные.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.09.2013, 18:12
#26
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Вся суть этого бесполезного форума - только успешно трепаться языком,
хотя я дал быстрый пример как можно было начать программу,
вместо этого наши загуренные болтуны обсуждают мой чахлый
набросок, молодца, мои поздравления, сходите еще на ciberforum.ru
и объясните там тоже как надо правильно писать, может вам всем слабо
заодно поучить народ на stackoverflow.com?
Олег, имхо уж лучше не давать ничего, чем давать "чахлые наброски"(с). Какой смысл сюда за уши притягивать ciberforum.ru и stackoverflow.com? Не нужно софистикой заниматься. Ты думаешь, что если ты на обозначенных форумах выложишь код с такими ошибками, то тебе никто на них не укажет (при условии, что будут читать его)? Я сильно сомневаюсь в этом... Или и там указавший сразу станет "загуренным болтуном"? Вопрос риторический.

Ты выложил код. Я дал по нему аргументированные замечания. Если я не прав - так же аргументированно об этом и пиши. А фразы, типа "загуренные болтуны" и твои "поздравления" - это, в данном случае, ни о чём и более соответствуют уровню школоты (уж извини)... Если я вижу интересный и качественный код - стараюсь брать его на вооружение. Если вижу косяки - сообщаю о них. Кто и как для себя трактует мои замечания - мне фиолетово.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 13.09.2013, 19:05
#27
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Цитата:
Сообщение от hwd Посмотреть сообщение
Я не понял этой фразы. Что подразумевается под "структурами данных произвольного формата"?

100%

Это вряд ли, т.к. и на XML можно написать компактный по объёму контент.

в данном случае речь о данных, представленных в ТЕКСТОВОМ формате.
Здесь вопрос не столько в "универсальности формата", сколько в "универсальности обработки". Обрабатывать структурированные текстовые данные гораздо удобней тем же LINQ to XML, чем построчно читать текст из потока (stream) и затем выполнять парсинг полученного контента, а потом ещё и заниматься внесением изменений в эти данные, вставляя строки между уже имеющимися, изменяя существующие записи, удаляя лишние и т.п.

В данном случае, заочное приведение данных (в памяти) подобно приведению дробей к единому знаменателю, чтобы получить возможность выполнения сложения. Только в нашем случае мы получаем не возможность сложения, а гибкую возможность модификации\аналитики данных без необходимости написания кучи дополнительного кода, за счёт того, что воспользуемся уже имеющимися технологиями.

P.S. Если всё ещё не понятно о чём я говорю, то можно сделать простое сравнение: ты напиши свой вариант кода, позволяющего модифицировать данные, выше выложенные автором, а я свой. Затем совместно и оценим объём кода и удобство обработки данных с промежуточной конвертацией в XML и без неё, на конкретных примерах кода. Т.к. автор уже слился с темы (посматривает, но ничего не пишет), то кодом лучше будет обменяться через скайп и там же обсудить результаты, т.к. помогать в решении, видя исходники автора и конкретные проблемные моменты в его коде - это одно, а собственно решать за кого-то - это другое (второй вариант мне претит, да и без меня найдутся те, кто с низкого старта рванутся за него всё делать).
Кто слился?) Я тут, просто тут понеслось обсуждение того, чего я не понимаю, вот и не пишу
h6784rfg6 вне форума  
 
Непрочитано 13.09.2013, 19:20
#28
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


h6784rfg6, я вам дал два! алгоритма решения вашей задачи: программистский и управленческий, реализуйте хотя бы один и будет вам счастье.
gomer вне форума  
 
Непрочитано 13.09.2013, 19:49
#29
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


[quote=hwd;1150322] QUOTE]
Ignored
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.09.2013, 18:58
#30
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Ладно, программу я написал. Все анализирует, все сохраняет. Но вот проблема:

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

Код:
[Выделить все]
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry

Public Class Class1

    Private Structure oTEXT
        Dim REF As String
        Dim XREFS As String
        Dim X_SKAL As Double
        Dim HOHE As Decimal
        Dim DREHUNG As Decimal
        Dim STIL As String
        Dim PKT_X As List(Of Decimal)
        Dim PKT_Y As List(Of Decimal)
        Dim TYP As String
        Dim FARBE As String
        Dim TEXTFARBE As Integer
        Dim TEXT As String
    End Structure

    Private Structure oPOLYLINIE
        Dim REF As String
        Dim XREFS As String
        Dim FARBE As String
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oRAHMEN
        Dim REF As String
        Dim XREFS As String
        Dim LTYP As String
        Dim BREITE As Decimal
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
        Dim FARBE As Integer
    End Structure

    Private Structure oKMMARKE
        Dim REF As String
        Dim XREFS As String
        Dim STR As Integer
        Dim KM As Decimal
        Dim TYP As String
        Dim DA As Decimal
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oKMTXT
        Dim REF As String
        Dim XREFS As String
        Dim STR As Integer
        Dim HOHE As Decimal
        Dim DREHUNG As Decimal
        Dim X_SKAL As Double
        Dim STIL As String
        Dim TYP As String
        Dim FARBE As String
        Dim TEXTFARBE As Integer
        Dim TEXT As String
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oLEGENDE_BEGINN
        Dim BASIS_X As List(Of String)
        Dim BASIS_Y As List(Of String)
        Dim MAXY As Integer
    End Structure

    Private Structure oBahnhof
        Dim REF As String
        Dim XREFS As List(Of String)
        Dim NAME As String
        Dim ID As Integer
        Dim STRECKE As Integer
        Dim KM As Decimal
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim FARBE As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oRIPFEIL
        Dim REF As String
        Dim XREFS As String
        Dim TEXT As String
        Dim HOHE As Decimal
        Dim DREHUNG As Decimal
        Dim X_SKAL As Double
        Dim STIL As String
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oABZWEIG
        Dim REF As String
        Dim XREFS As String
        Dim NAME As String
        Dim ID As Integer
        Dim STRECKE As Integer
        Dim KM As Decimal
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim FARBE As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oGRENZE
        Dim REF As String
        Dim XREFS As String
        Dim STRECKE As Integer
        Dim KM As Decimal
        Dim FARBE As Integer
        Dim TYP As String
        Dim BREITE As Decimal
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
        Dim DA As List(Of String)
    End Structure

    Private Structure oSOLID
        Dim REF As String
        Dim XREFS As String
        Dim FARBE As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oSTRECKENENDE
        Dim REF As String
        Dim XREFS As String
        Dim TEXT As String
        Dim STRECKE As Integer
        Dim KM As Decimal
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim FARBE As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Structure oSGL
        Dim REF As String
        Dim XREFS As String
        Dim BREITE As Decimal
        Dim LTYP As String
        Dim FARBE As Integer
        Dim EVB As Decimal
        Dim RIKZ As String
        Dim Number As Integer
        Dim PKT_X As List(Of String)
        Dim PKT_Y As List(Of String)
    End Structure

    Private Text_Collection As New List(Of oTEXT)
    Private Polylinie_Collection As New List(Of oPOLYLINIE)
    Private Rahmen_Collection As New List(Of oRAHMEN)
    Private KmMarke_Collection As New List(Of oKMMARKE)
    Private KmTxt_Collection As New List(Of oKMTXT)
    Private LegendeBeginn_Collection As New List(Of oLEGENDE_BEGINN)
    Private Bahnhof_Collection As New List(Of oBahnhof)
    Private Ripfeil_Collection As New List(Of oRIPFEIL)
    Private Abzweig_Collection As New List(Of oABZWEIG)
    Private Grenze_Collection As New List(Of oGRENZE)
    Private Solid_Collection As New List(Of oSOLID)
    Private Streckenende_Collection As New List(Of oSTRECKENENDE)
    Private SGL_Collection As New List(Of oSGL)

    Private Sub Analise()
        Dim Del() As String = {vbCrLf & vbCrLf}
        Dim Blocks() As String = IO.File.ReadAllText("C:\Users\MykytaKolpachov\Desktop\S-Bahn Bln.RVX").Split(Del, StringSplitOptions.None)
        Dim splBlock() As String
        Dim Param_Val() As String
        Dim SGL_Split() As String
        Dim splPkt() As String
        Dim splXREFS() As String
        For Each Block As String In Blocks
            splBlock = Split(Block, vbCrLf)
            If splBlock(0).Contains("=") Then
                Dim strucSGL As New oSGL
                strucSGL.PKT_X = New List(Of String)
                strucSGL.PKT_Y = New List(Of String)
                SGL_Split = Split(splBlock(0), "=")
                strucSGL.Number = CInt(SGL_Split(1))
                For i = 1 To splBlock.Length - 1
                    Param_Val = Split(splBlock(i), "=")
                    Select Case Param_Val(0)
                        Case "REF"
                            strucSGL.REF = Param_Val(1).ToString
                        Case "XREFS"
                            strucSGL.XREFS = (Param_Val(1).ToString)
                        Case "BREITE"
                            strucSGL.BREITE = CDec(Param_Val(1))
                        Case "RIKZ"
                            strucSGL.RIKZ = Param_Val(1)
                        Case "EVB"
                            strucSGL.EVB = CDec(Param_Val(1))
                        Case "LTYP"
                            strucSGL.LTYP = Param_Val(1).ToString
                        Case "FARBE"
                            strucSGL.FARBE = CInt(Param_Val(1))
                        Case "PKT"
                            splPkt = Split(Param_Val(1), "/")
                            strucSGL.PKT_X.Add(splPkt(0).ToString)
                            strucSGL.PKT_Y.Add(splPkt(1).ToString)
                        Case "LAYOUT:"
                    End Select
                Next
                SGL_Collection.Add(strucSGL)
                'here add the structure to the collection
            End If
            Select Case splBlock(0)
                Case ">TEXT"
                    Dim strucText As New oTEXT
                    strucText.PKT_X = New List(Of Decimal)
                    strucText.PKT_Y = New List(Of Decimal)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucText.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucText.XREFS = Param_Val(1).ToString
                            Case "X-SKAL"
                                strucText.X_SKAL = CDbl(Param_Val(1))
                            Case "HOHE"
                                strucText.HOHE = CDec(Param_Val(1))
                            Case "DREHUNG"
                                strucText.DREHUNG = CDec(Param_Val(1))
                            Case "STIL"
                                strucText.STIL = Param_Val(1).ToString
                            Case "TYP"
                                strucText.TYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucText.FARBE = Param_Val(1).ToString
                            Case "TEXTFARBE"
                                strucText.TEXTFARBE = CInt(Param_Val(1))
                            Case "TEXT"
                                strucText.TEXT = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucText.PKT_X.Add(CDec(splPkt(0)))
                                strucText.PKT_Y.Add(CDec(splPkt(1)))
                        End Select
                    Next
                    Text_Collection.Add(strucText)
                    'here add the structure to the collection
                Case ">POLYLINIE"
                    Dim strucPolylinie As New oPOLYLINIE
                    strucPolylinie.PKT_X = New List(Of String)
                    strucPolylinie.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucPolylinie.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucPolylinie.XREFS = Param_Val(1).ToString
                            Case "BREITE"
                                strucPolylinie.BREITE = CDec(Param_Val(1))
                            Case "HOHE"
                                strucPolylinie.LTYP = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucPolylinie.PKT_X.Add(splPkt(0).ToString)
                                strucPolylinie.PKT_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    Polylinie_Collection.Add(strucPolylinie)
                    'here add the structure to the collection
                Case ">RAHMEN"
                    Dim strucRAHMEN As New oRAHMEN
                    strucRAHMEN.PKT_X = New List(Of String)
                    strucRAHMEN.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucRAHMEN.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucRAHMEN.XREFS = Param_Val(1).ToString
                            Case "BREITE"
                                strucRAHMEN.BREITE = CDec(Param_Val(1))
                            Case "HOHE"
                                strucRAHMEN.LTYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucRAHMEN.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucRAHMEN.PKT_X.Add(splPkt(0).ToString)
                                strucRAHMEN.PKT_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    Rahmen_Collection.Add(strucRAHMEN)
                    'here add the structure to the collection
                Case "KMMARKE"
                    Dim strucKMMARKE As New oKMMARKE
                    strucKMMARKE.PKT_X = New List(Of String)
                    strucKMMARKE.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucKMMARKE.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucKMMARKE.XREFS = Param_Val(1).ToString
                            Case "STR"
                                strucKMMARKE.STR = CInt(Param_Val(1))
                            Case "KM"
                                strucKMMARKE.KM = CDec(Param_Val(1))
                            Case "DA"
                                strucKMMARKE.DA = CDec(Param_Val(1))
                            Case "TYP"
                                strucKMMARKE.TYP = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucKMMARKE.PKT_X.Add(splPkt(0).ToString)
                                strucKMMARKE.PKT_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    KmMarke_Collection.Add(strucKMMARKE)
                    'here add the structure to the collection
                Case "KMTXT"
                    Dim strucKMTXT As New oKMTXT
                    strucKMTXT.PKT_X = New List(Of String)
                    strucKMTXT.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucKMTXT.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucKMTXT.XREFS = Param_Val(1).ToString
                            Case "X-SKAL"
                                strucKMTXT.X_SKAL = CDbl(Param_Val(1))
                            Case "HOHE"
                                strucKMTXT.HOHE = CDec(Param_Val(1))
                            Case "DREHUNG"
                                strucKMTXT.DREHUNG = CDec(Param_Val(1))
                            Case "STR"
                                strucKMTXT.STR = CInt(Param_Val(1))
                            Case "STIL"
                                strucKMTXT.STIL = Param_Val(1).ToString
                            Case "TYP"
                                strucKMTXT.TYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucKMTXT.FARBE = Param_Val(1).ToString
                            Case "TEXTFARBE"
                                strucKMTXT.TEXTFARBE = CInt(Param_Val(1))
                            Case "TEXT"
                                strucKMTXT.TEXT = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucKMTXT.PKT_X.Add(splPkt(0).ToString)
                                strucKMTXT.PKT_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    KmTxt_Collection.Add(strucKMTXT)
                    'here add the structure to the collection
                Case ">LEGENDE_BEGINN"
                    Dim strucLEGENDE_BEGINN As New oLEGENDE_BEGINN
                    strucLEGENDE_BEGINN.BASIS_X = New List(Of String)
                    strucLEGENDE_BEGINN.BASIS_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "MAXY"
                                strucLEGENDE_BEGINN.MAXY = CInt(Param_Val(1))
                            Case "BASIS"
                                splPkt = Split(Param_Val(1), "/")
                                strucLEGENDE_BEGINN.BASIS_X.Add(splPkt(0).ToString)
                                strucLEGENDE_BEGINN.BASIS_Y.Add(splPkt(1).ToString)
                        End Select
                    Next
                    LegendeBeginn_Collection.Add(strucLEGENDE_BEGINN)
                    'here add the structure to the collection
                Case ">BAHNHOF"
                    Dim strucBAHNHOF As New oBahnhof
                    strucBAHNHOF.PKT_X = New List(Of String)
                    strucBAHNHOF.PKT_Y = New List(Of String)
                    strucBAHNHOF.XREFS = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucBAHNHOF.REF = Param_Val(1).ToString
                            Case "XREFS"
                                splXREFS = Split(Param_Val(1), "/")
                                For q = 0 To splXREFS.Length - 1
                                    strucBAHNHOF.XREFS.Add(splXREFS(q).ToString)
                                Next
                            Case "ID"
                                strucBAHNHOF.ID = CInt(Param_Val(1))
                            Case "STRECKE"
                                strucBAHNHOF.STRECKE = CInt(Param_Val(1))
                            Case "KM"
                                strucBAHNHOF.KM = CDec(Param_Val(1))
                            Case "BREITE"
                                strucBAHNHOF.BREITE = CDec(Param_Val(1))
                            Case "LAYOUT:"
                            Case "LTYP"
                                strucBAHNHOF.LTYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucBAHNHOF.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucBAHNHOF.PKT_X.Add(splPkt(0).ToString)
                                strucBAHNHOF.PKT_Y.Add(splPkt(1).ToString)
                            Case Else
                                strucBAHNHOF.NAME = Param_Val(0)
                        End Select
                    Next
                    Bahnhof_Collection.Add(strucBAHNHOF)
                    'here add the structure to the collection
                Case ">RIPFEIL"
                    Dim strucRIPFEIL As New oRIPFEIL
                    strucRIPFEIL.PKT_X = New List(Of String)
                    strucRIPFEIL.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucRIPFEIL.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucRIPFEIL.XREFS = (Param_Val(1).ToString)
                            Case "TEXT"
                                strucRIPFEIL.TEXT = (Param_Val(1).ToString)
                            Case "HOHE"
                                strucRIPFEIL.HOHE = CDec(Param_Val(1))
                            Case "DREHUNG"
                                strucRIPFEIL.DREHUNG = CDec(Param_Val(1))
                            Case "X-SKAL"
                                strucRIPFEIL.X_SKAL = CDbl(Param_Val(1))
                            Case "STIL"
                                strucRIPFEIL.STIL = Param_Val(1).ToString
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucRIPFEIL.PKT_X.Add(splPkt(0).ToString)
                                strucRIPFEIL.PKT_Y.Add(splPkt(1).ToString)
                            Case "LAYOUT:"
                        End Select
                    Next
                    Ripfeil_Collection.Add(strucRIPFEIL)
                    'here add the structure to the collection
                Case ">ABZWEIG"
                    Dim strucABZWEIG As New oABZWEIG
                    strucABZWEIG.PKT_X = New List(Of String)
                    strucABZWEIG.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucABZWEIG.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucABZWEIG.XREFS = (Param_Val(1).ToString)
                            Case "ID"
                                strucABZWEIG.ID = CInt(Param_Val(1))
                            Case "STRECKE"
                                strucABZWEIG.STRECKE = CInt(Param_Val(1))
                            Case "KM"
                                strucABZWEIG.KM = CDec(Param_Val(1))
                            Case "BREITE"
                                strucABZWEIG.BREITE = CDec(Param_Val(1))
                            Case "LTYP"
                                strucABZWEIG.LTYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucABZWEIG.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucABZWEIG.PKT_X.Add(splPkt(0).ToString)
                                strucABZWEIG.PKT_Y.Add(splPkt(1).ToString)
                            Case "LAYOUT:"
                            Case Else
                                strucABZWEIG.NAME = Param_Val(0).ToString
                        End Select
                    Next
                    Abzweig_Collection.Add(strucABZWEIG)
                    'here add the structure to the collection
                Case ">GRENZE"
                    Dim strucGRENZE As New oGRENZE
                    strucGRENZE.PKT_X = New List(Of String)
                    strucGRENZE.PKT_Y = New List(Of String)
                    strucGRENZE.DA = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucGRENZE.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucGRENZE.XREFS = (Param_Val(1).ToString)
                            Case "STRECKE"
                                strucGRENZE.STRECKE = CInt(Param_Val(1))
                            Case "KM"
                                strucGRENZE.KM = CDec(Param_Val(1))
                            Case "BREITE"
                                strucGRENZE.BREITE = CDec(Param_Val(1))
                            Case "TYP"
                                strucGRENZE.TYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucGRENZE.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucGRENZE.PKT_X.Add(splPkt(0).ToString)
                                strucGRENZE.PKT_Y.Add(splPkt(1).ToString)
                            Case "DA"
                                strucGRENZE.DA.Add(Param_Val(1))
                            Case "LAYOUT:"
                        End Select
                    Next
                    Grenze_Collection.Add(strucGRENZE)
                    'here add the structure to the collection
                Case ">SOLID"
                    Dim strucSOLID As New oSOLID
                    strucSOLID.PKT_X = New List(Of String)
                    strucSOLID.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucSOLID.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucSOLID.XREFS = (Param_Val(1).ToString)
                            Case "FARBE"
                                strucSOLID.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucSOLID.PKT_X.Add(splPkt(0).ToString)
                                strucSOLID.PKT_Y.Add(splPkt(1).ToString)
                            Case "LAYOUT:"
                        End Select
                    Next
                    Solid_Collection.Add(strucSOLID)
                    'here add the structure to the collection
                Case ">STRECKENENDE"
                    Dim strucSTRECKENENDE As New oSTRECKENENDE
                    strucSTRECKENENDE.PKT_X = New List(Of String)
                    strucSTRECKENENDE.PKT_Y = New List(Of String)
                    For i = 1 To splBlock.Length - 1
                        Param_Val = Split(splBlock(i), "=")
                        Select Case Param_Val(0)
                            Case "REF"
                                strucSTRECKENENDE.REF = Param_Val(1).ToString
                            Case "XREFS"
                                strucSTRECKENENDE.XREFS = (Param_Val(1).ToString)
                            Case "STRECKE"
                                strucSTRECKENENDE.STRECKE = CInt(Param_Val(1))
                            Case "KM"
                                strucSTRECKENENDE.KM = CDec(Param_Val(1))
                            Case "BREITE"
                                strucSTRECKENENDE.BREITE = CDec(Param_Val(1))
                            Case "LTYP"
                                strucSTRECKENENDE.LTYP = Param_Val(1).ToString
                            Case "FARBE"
                                strucSTRECKENENDE.FARBE = CInt(Param_Val(1))
                            Case "PKT"
                                splPkt = Split(Param_Val(1), "/")
                                strucSTRECKENENDE.PKT_X.Add(splPkt(0).ToString)
                                strucSTRECKENENDE.PKT_Y.Add(splPkt(1).ToString)
                            Case "LAYOUT:"
                            Case Else
                                strucSTRECKENENDE.TEXT = Param_Val(0).ToString
                        End Select
                    Next
                    Streckenende_Collection.Add(strucSTRECKENENDE)
                    'here add the structure to the collection
            End Select
        Next
    End Sub

    <CommandMethod("CreateText")> _
    Public Sub CreateText()
        Analise()
        '' Get the current document and database
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database

        '' Start a transaction
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

            '' Open the Block table for read
            Dim acBlkTbl As BlockTable
            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                         OpenMode.ForRead)

            '' Open the Block table record Model space for write
            Dim acBlkTblRec As BlockTableRecord
            acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                            OpenMode.ForWrite)

            '' Create a single-line text object
            Dim acText As DBText = New DBText()
            acText.SetDatabaseDefaults()
            acText.Position = New Point3d(Text_Collection(0).PKT_X(0), Text_Collection(0).PKT_Y(0), 0)
            acText.Height = 0.5
            acText.TextString = Text_Collection(0).TEXT

            acBlkTblRec.AppendEntity(acText)
            acTrans.AddNewlyCreatedDBObject(acText, True)

            '' Save the changes and dispose of the transaction
            acTrans.Commit()
        End Using
    End Sub
End Class
П.С. Код без "автокадовского" работает на ура. Все элементы отображает.
Вложения
Тип файла: zip S-Bahn Bln.zip (296.1 Кб, 29 просмотров)
h6784rfg6 вне форума  
 
Непрочитано 18.09.2013, 11:30
#31
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


В коде у Вас проблема.
Вы взяли пример создания текста в автокаде и сунули его к себе в проект, совершенно не понимая что и как должно работать. Вы даже формат передаваемых данных не смотрели.
Ответы на Ваши вопросы:
1. Вы выводите только один текстовый объект из 505 имеющихся в Вашем файле.
2. Вы выводите объект по первым координатам, хотя координат может быть множество (обращаю внимание, что в Вашем файле такого не случается и вероятно делать список координат в описании структуры текста не нужно.).
3. Координаты точки задаются в формате double , а не Decimal (либо меняйте прямо в структуре, либо преобразовывайте при создании текста)
4. Масштаб текста задан в переменной X_SKAL в структуре oTEXT

Остальное смотреть лень.


Это Ваш текст правильно нанесенный


ЗЫ.
Чисто из любопытства, почему Вы используйте и заполняете структуры данных, а потом по списку этих структур создаете объекты, может убрать промежуточное звено и сразу создавать объекты?

Последний раз редактировалось Boxa, 18.09.2013 в 11:50.
Boxa вне форума  
 
Автор темы   Непрочитано 18.09.2013, 12:49
#32
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Да уж разобрался) ПОлучилось один в один

по ЗЫ: Просто так удобнее оперировать с данными. Я могу определенный кусок не умещать, а так надо будет пользоваться цикличностью
h6784rfg6 вне форума  
 
Автор темы   Непрочитано 20.09.2013, 14:16
#33
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Назрел такой вопрос:

Если я создам примитив в Автокаде, то можно ли как нибудь сохранить этот примити в код? Ну например я добавлю новую линию - мой dll должен уметь увидеть это и добавить его в список (список свойств должен выглядеть так же, как и файл из которого импортировали весь рисунок). Такое возможно?
h6784rfg6 вне форума  
 
Непрочитано 20.09.2013, 14:22
#34
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409


А если примитив будет удаляться? Или меняться?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.09.2013, 14:23
#35
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от h6784rfg6 Посмотреть сообщение
можно ли как нибудь
Можно. Разрешаю.

ЗЫ.
Вы бы хотя бы для приличия изучили тот формат данных с которым работаете и справку, вопросов бы не возникало.
Boxa вне форума  
 
Автор темы   Непрочитано 20.09.2013, 14:24
#36
h6784rfg6


 
Регистрация: 12.09.2013
Сообщений: 24


Ты уловил суть) Так это возможно?

Тот формат с которым я работаю не стандардизирован, он высосан из ...
h6784rfg6 вне форума  
 
Непрочитано 20.09.2013, 14:42
#37
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Я не понимаю вопроса. Вам кто то запрещает считать параметры объекта в автокаде, заполнит соответствующую этому типу объектов структуру , а потом вывести в текстовый файл? То , откуда он высосан ничего не меняет. Разберитесь с форматом, какое поле, за что отвечает и какие данные хранит.
И прочитайте в конце, концов справку по net api.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как провести чтение, сортировку и сохранение данных из тестового файла



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
MS Word Нужен скрипт для копирования с одновременной заменой части текста Солидворкер Прочее. Программное обеспечение 27 27.11.2012 15:52
структурированный список Holon Программирование 22 11.09.2007 14:09
чтение данных из файла Александер Программирование 6 08.09.2005 10:24