powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Данные вида (name:value) в таблицу вида столбцы-name, строки-values
16 сообщений из 16, страница 1 из 1
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32708578
Apeldop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеются данные вида (наименование величины # значение_величины), записи разделены пятью пустыми строками и символом ' (апостроф):

$ConflictAction # 1
DEPART_CODE # 1
TARG_DEP # 1
Targ_Depart # 01
CHAIN_DATE # 01.08.2000
CHAIN_TIME # 17:31:07
Depart # 01
P_F_Name # Иванов А.В.
P_G_Name #
TYPE_NAME # Исходящий
P_C_Name #
P_I_Name #
P_R_Name #
Last_Edit # Сергеев Владимир
Last_Date # 14.09.2000
(5

пустых

строк)
'(Апостроф, пошла следующая запись)
$ConflictAction # 13
DEPART_CODE #
TARG_DEP #
Targ_Depart # 01
CHAIN_DATE # 01.08.2000
CHAIN_TIME # 17:31:07
.
.
.
и т.д.

Записей много, причем, некоторые поля в одной записи могут быть пустыми (P_C_Name,P_I_Name, P_R_Name, и др...), а в другой - заполненными.

Цель - привести все к табличному виду
---------------------------------------------------------------------------------------------------------------------------
|$ConflictAction|DEPART_CODE|TARG_DEP|...|...|...|...|__Last_Edit___|_Last_Date_ |
| _____ 1 _____ | ___ 1 ______ | ____ 01 __ |...|...|...|...|Сергеев Влад |14.12.04 ___ |
| _____ 13 ____ | ___________ | ____ 01 __ |...|...|...|...|Андреев_____ |12.01.01 ___ |
И т.д.
Первый раз столкнулся с Excel, не могу понять, как это сделать. Попробовал делать запросы, они работают, но очень уж много столбцов (в качестве примера я привел усеченный вид данных, на самом деле там 85 наименований_величин и около 13 файлов с данными по 700 ЗАПИСЕЙ в каждом...) и к тому же если встречаются пустые поля, то запрос их просто пропускает, и соответствия полей в итоге не получается. Буду благодарен за любую помощь или предложения.
-----
С уважением, Александр.
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32708881
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а пример мона ?
приатачь файло .
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32709110
Apeldop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример - чего? готов конечно выслать, только что требуется-то?
-----
С уважением, Александр.
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32709380
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой нибудь из этих 13и файлов например ... если кончено там не конф. данные :)
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32709470
Apeldop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот собственно один из файлов, единственный маленький, остальные содержат очень большие объемы данных.
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32709734
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо файл не очень подходит для работы с запросами
я бы сделал следующее
1. сделал бы тип
Public Type TMyType
ConflictAction As Long
DEPART_CODE As Long
.......
End Type
Как я понял новая запись начинается со строки $ConflictAction
это поможет построчно прочитать файл и заполнять тип TMyType
при заполнении типа можно проверять наличие # : до # это имя поля в записи, после - значение, соотвественно если # - это последний символ в строке, то значение не указано.
если правила разбора сложнее, то можно сделать класс с обработчиком св-ва let.

Второй вариант, это назначить в 1 строке каждому столбцу имя, например, а1 - ConflictAction,B1 - DEPART_CODE и т.д. При чтении записи из файла, брать все что слева от # и обращаться через имя поля к ячейке в Excel.
В общем, пробуйте.

...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32709793
Apeldop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ооооооох... Все это для меня чересчур круто! Я вобщем-то в excel сумел добиться разделения по столбцам названия и значения (data.xls), теперь надо как-то сделать пробег по строкам, и чтобы значения, соответствующие наименованию, он вставлял в столбец новой таблицы (konvert.xls), название которого соответствует этому наименованию... Вот только как это бы сделать...
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32709795
Apeldop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И, собственно, заготовка для вытащенных данных.
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32710046
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно коряво, не отшлифовано, но могет поможет тебе...
Stepler (щёлк-щёлк!!)

Код: plaintext
 P.S.Присутствовали ли Вы, когда Вас фотографировали?  
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32710052
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл :
ты свой приложенный файл открываешь Экселем и далее запускаешь Макрос2 в моем файле...
Stepler (щёлк-щёлк!!)

Код: plaintext
 P.S.Присутствовали ли Вы, когда Вас фотографировали?  
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32710146
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в VBA не очень, но могу предложить еще один вариант
Сохраняешь данный текст как hta файл (например parser.hta).
Выбираешь файл, она из него сделает xml файл. А xml можно в любую программу импортировать.
Кстати, будет выдавать ошибку типа "Достигнуть конец файла" (перевод примерный, т.к. у меня на english все...), не обращай внимания :) Не охота доделывать. Удачи.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
<html>
<head>
	<title>Data parser</title>
	<HTA:APPLICATION ID="Yeehaa" 
    APPLICATIONNAME="XMLparser"
	BORDER="thin"
    BORDERSTYLE="normal"
    CAPTION="yes"
    SHOWINTASKBAR="no"
    SINGLEINSTANCE="yes"
    SYSMENU="yes">
</head>

<body>
<table id=datatable>
<tr>
<td></td>
</tr>
</table>
<script>
function GetFile(file_name)
{
   var fso, f, f_new, s = "";
   var ForReading =  1 , ForWriting =  2 ;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile(file_name, ForReading, true);
   f_new = fso.CreateTextFile(file_name+".xml");
   f_new.WriteLine( '<?xml version="1.0" encoding="ISO8859-1"?>'); 
   f_new.WriteLine("<file>");
   var first = true;
   while (!f.AtEndOfStream) {
    f_new.WriteLine("<data>");
	s = f.ReadLine();
	first = true;
	while (s != "'") {
	if (first) { first = false; } else { s = f.ReadLine();}
	if (s != "" && s != "'") {
	 f_new.WriteLine("<" + s.split(" #")[ 0 ].replace(/\$/, "") + ">" + s.split(" # ")[ 1 ] + "</" + s.split(" # ")[ 0 ].replace(/\$/, "") + ">");
	 }
	if (f.AtEndOfStream) {
	f_new.WriteLine("</data>");
	f_new.WriteLine("</file>");
	} 
	} 
	f_new.WriteLine("</data>");
   }
   f_new.Close();	
   f.Close();
}
</script>
<input id=filename type="file" value=""><input type="button" value="Ïàðñèòü" onClick="GetFile(filename.value)">
</body>
</html>

...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32710369
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде нашел ошибку ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
<html>
<head>
<title>Data parser</title>
<HTA:APPLICATION ID="Yeehaa" 
APPLICATIONNAME="XMLparser"
BORDER="thin"
BORDERSTYLE="normal"
CAPTION="yes"
SHOWINTASKBAR="yes"
SINGLEINSTANCE="yes"
SYSMENU="yes">
</head>

<body>
<script>
function GetFile(file_name)
{
   var fso, f, f_new, s = "";
   var ForReading =  1 , ForWriting =  2 ;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile(file_name, ForReading, true);
   f_new = fso.CreateTextFile(file_name+".xml");
   f_new.WriteLine( '<?xml version="1.0" encoding="ISO8859-1"?>'); 
   f_new.WriteLine("<file>");
   var first = true;
   while (!f.AtEndOfStream) {
    f_new.WriteLine("<data>");
	s = f.ReadLine();
	first = true;
	while (s != "'" && !f.AtEndOfStream) {
	if (first) { first = false; } else { s = f.ReadLine();}
	if (s != "" && s != "'") {
	 f_new.WriteLine("<" + s.split(" #")[ 0 ].replace(/\$/, "") + ">" + s.split(" # ")[ 1 ] + "</" + s.split(" # ")[ 0 ].replace(/\$/, "") + ">");
	 }
	} 
	f_new.WriteLine("</data>");
   }
   f_new.WriteLine("</file>");
   f_new.Close();	
   f.Close();
}
</script>
<input id=filename type="file" value=""><input type="button" value="Парсить" onClick="GetFile(filename.value)">
</body>
</html>
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32710679
Apeldop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное всем, кто откликнулся, после небольших исправлений макроса Stepler'a все сработало. Однако вот еще такой вопрос: данные оказались равномерными, но в некоторых записях (которых в принципе оказалось достаточно много) присутствуют какие-то левые наименования величин. Каким образом можно удалить эти СТРОКИ по условию, то есть, допустим, есть строка
$link #
и у этого наименования пустое значение, и вообще эти строки не нужны. То есть надо пройтись по всему документу и удалить все СТРОКИ (именно строки, а не значения в них), у которых наименование равно $link. Как это можно сделать?
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32710920
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа Cells.Find(What:="$link", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Rows(" 2:2 ").Select ' У тебя енто будет N - номер строки
Selection.Delete Shift:=xlUp
Stepler (щёлк-щёлк!!)

Код: plaintext
 P.S.Присутствовали ли Вы, когда Вас фотографировали?  
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32710930
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Steplerтипа Cells.Find(What:="$link", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Rows(" 2:2 ").Select ' У тебя енто будет N - номер строки
вот сюды
Selection.Delete Shift:=xlUp

Да, опять забыл - где зеленый, туда проверку на пустоты ячеек строки, как у меня было в Макросе2 "If IsEmpty(ActiveCell(N, i)) Then...."
Stepler (щёлк-щёлк!!)

Код: plaintext
 P.S.Присутствовали ли Вы, когда Вас фотографировали?  
...
Рейтинг: 0 / 0
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
    #32711555
Apeldop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Stepler - просто монстр! :) Правда, очень выручили!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]