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

$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
23.09.2004, 16:03
    #32708881
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
а пример мона ?
приатачь файло .
...
Рейтинг: 0 / 0
23.09.2004, 17:20
    #32709110
Apeldop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Пример - чего? готов конечно выслать, только что требуется-то?
-----
С уважением, Александр.
...
Рейтинг: 0 / 0
23.09.2004, 20:17
    #32709380
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Какой нибудь из этих 13и файлов например ... если кончено там не конф. данные :)
...
Рейтинг: 0 / 0
23.09.2004, 22:23
    #32709470
Apeldop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Вот собственно один из файлов, единственный маленький, остальные содержат очень большие объемы данных.
...
Рейтинг: 0 / 0
24.09.2004, 09:52
    #32709734
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
имхо файл не очень подходит для работы с запросами
я бы сделал следующее
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
24.09.2004, 10:23
    #32709793
Apeldop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Ооооооох... Все это для меня чересчур круто! Я вобщем-то в excel сумел добиться разделения по столбцам названия и значения (data.xls), теперь надо как-то сделать пробег по строкам, и чтобы значения, соответствующие наименованию, он вставлял в столбец новой таблицы (konvert.xls), название которого соответствует этому наименованию... Вот только как это бы сделать...
...
Рейтинг: 0 / 0
24.09.2004, 10:24
    #32709795
Apeldop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
И, собственно, заготовка для вытащенных данных.
...
Рейтинг: 0 / 0
24.09.2004, 11:49
    #32710046
Stepler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Конечно коряво, не отшлифовано, но могет поможет тебе...
Stepler (щёлк-щёлк!!)

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

Код: plaintext
 P.S.Присутствовали ли Вы, когда Вас фотографировали?  
...
Рейтинг: 0 / 0
24.09.2004, 12:28
    #32710146
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Я в 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
24.09.2004, 13:42
    #32710369
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Вроде нашел ошибку ...
Код: 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
24.09.2004, 15:37
    #32710679
Apeldop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Спасибо огромное всем, кто откликнулся, после небольших исправлений макроса Stepler'a все сработало. Однако вот еще такой вопрос: данные оказались равномерными, но в некоторых записях (которых в принципе оказалось достаточно много) присутствуют какие-то левые наименования величин. Каким образом можно удалить эти СТРОКИ по условию, то есть, допустим, есть строка
$link #
и у этого наименования пустое значение, и вообще эти строки не нужны. То есть надо пройтись по всему документу и удалить все СТРОКИ (именно строки, а не значения в них), у которых наименование равно $link. Как это можно сделать?
...
Рейтинг: 0 / 0
24.09.2004, 17:11
    #32710920
Stepler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
типа 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
24.09.2004, 17:16
    #32710930
Stepler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
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
25.09.2004, 14:54
    #32711555
Apeldop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные вида (name:value) в таблицу вида столбцы-name, строки-values
Спасибо! Stepler - просто монстр! :) Правда, очень выручили!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Данные вида (name:value) в таблицу вида столбцы-name, строки-values / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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