質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1746閲覧

gdataファイルの扱いについて

sigmacshaling

総合スコア14

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/05/05 03:12

gdata形式のファイルについて、具体的な取扱いに関する情報が載っているサイトをご存知ですか?
そのファイルの特徴、他形式のものとの違い、プログラミング言語との親和性等が知りたいです。

gdataファイルは、例えば以下のように記述されています。

@bf34cd9a-d653-42ce-90d2-0e0b3beb0316 { #2479056145 items :: dp_item_list : <object>[ dp(int) : @de86b58e-a2a5-4779-b793-96c137480cc1 { #3605065401 value :: int : 1; #460587879 name :: string : "INT_test"; }]; }

ご教授のほど、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/05/05 03:36

そのgdata形式のファイルとはどこから出てきたものを想定されてますか?
sigmacshaling

2018/05/05 05:29

某開発ツールを使用して作業をする際に、生成されるファイルです。
y_waiwai

2018/05/05 07:09

某、ですか。その開発ツールのメーカに問い合わせてください、としか言いようがありませんね
guest

回答2

0

ベストアンサー

察するに、EBGuideのフォーマットですね

gdata形式のファイルについて、具体的な取扱いに関する情報が載っているサイトをご存知ですか?

フォーマットの情報は一般に公開されていません
僕もElektrobitに問い合わせましたが、法人対応のみとのことで回答をもらえませんでした

そのファイルの特徴、他形式のものとの違い、プログラミング言語との親和性等が知りたいです。

フォーマットはほぼjsonそのままですので、気合で読めると思います。

↓ここがプロパティの実体の宣言で

#2479056145 items :: dp_item_list : <object>

↓ここがオブジェクトの実体の宣言です。

dp(int) : @de86b58e-a2a5-4779-b793-96c137480cc1 { #3605065401 value :: int : 1; #460587879 name :: string : "INT_test"; }

1つのプロパティは、オブジェクト、あるいは普通の数値や文字列を(通常)1つ持ちます。
1つのオブジェクトは複数のプロパティを持ちます。
ただし、質問に記述されている例は1つのプロパティは複数のオブジェクトを配列として持つ特殊な例です。

何らかの情報を抜き取りたい場合、python(ply)やC++(flex/bison)でパースするしかないと思います。
パーサジェネレータを使って遊んでいる人であれば、以下のコードが参考になるかもしれません。
(ちょっと前に書いてたやつなので、バグとかあったらごめんなさい)

python

1#!/usr/bin/env python 2import ply.lex as lex 3from ply.lex import TOKEN 4 5# 6#PRINT = print 7PRINT = lambda x : None 8 9#--------------------------------------------------------------------- 10# define states 11states = ( 12 ('text', 'exclusive'), 13 ('version', 'exclusive'), 14) 15 16#--------------------------------------------------------------------- 17# define literals 18literals = "()[]{}<>@#;," 19 20#--------------------------------------------------------------------- 21#define regular expression parts 22def PAREN(t): 23 t = r'(' + t + r')' 24 return t 25INTEGER_NUMBER_INTEGER = r'[+-]?[1-9][0-9]*[Ff]?|[+-]?0' 26INTEGER_NUMBER_FLOAT = r'[+-]?[1-9][0-9]*[Ff]?|[+-]?0[fF]?' 27INTEGER_NUMBER = PAREN(INTEGER_NUMBER_INTEGER) + "|" + PAREN(INTEGER_NUMBER_FLOAT ); 28REAL_NUMBER = PAREN(INTEGER_NUMBER_INTEGER) + r'?' + r'.[0-9]*[fF]?' 29NUMBER = PAREN(REAL_NUMBER) + r'|' + PAREN(INTEGER_NUMBER) 30 31#--------------------------------------------------------------------- 32# declare token 33tokens = ( 34 'NUMBER', 35 'EBGUIDE', 36 'BOOL', 37 'PROP_ID', 38 'OBJ_ID', 39 "START_TEXT", 40 'END_TEXT', 41 'TEXT', 42 'SYMBOL', 43 'VERSION', 44) 45 46#--------------------------------------------------------------------- 47# defien ignore token 48t_ignore = ' \t:' 49t_text_ignore = '' 50t_version_ignore = '' 51 52#--------------------------------------------------------------------- 53# define token by RE 54#t_EBGUIDE = r'EBGUIDE' 55 56#--------------------------------------------------------------------- 57# define token as function by state 58 59def t_ANY_newline(t): 60 r'\n+' 61 t.lexer.lineno += len(t.value) 62 63@TOKEN(NUMBER) 64def t_NUMBER(t): 65 PRINT(t.value) 66 t.value = t.value.replace("f", "") 67 t.value = t.value.replace("F", "") 68 t.value = float(t.value) 69 return t 70def t_EBGUIDE(t): 71 r'EBGUIDE' 72 PRINT(t.value) 73 t.lexer.push_state("version") 74 return t 75def t_BOOL(t): 76 r'true|false' 77 PRINT(t.value) 78 t.value = True if t.value == "true" else False 79 return t 80def t_PROP_ID(t): 81 r'\#[0-9]+' 82 PRINT(t.value) 83 return t 84def t_OBJ_ID(t): 85 r'@[a-zA-Z0-9\-]+' 86 PRINT(t.value) 87 return t 88def t_START_TEXT(t): 89 r'"' 90 PRINT(t.value) 91 t.lexer.push_state("text") 92def t_SYMBOL(t): 93 r'[a-zA-Z][a-zA-Z0-9_()\,]*' 94 PRINT(t.value) 95 return t 96 97def t_text_TEXT(t): 98 r'([^"\]|\"|\)+' 99 PRINT(t.value) 100 return t 101def t_text_END_TEXT(t): 102 r'"' 103 PRINT(t.value) 104 t.lexer.pop_state() 105 106def t_version_VERSION(t): 107 r'[^;]+' 108 PRINT(t.value) 109 return t 110def t_version_END_VERSION(t): 111 r';' 112 PRINT(t.value) 113 t.lexer.pop_state() 114 t.type = ';' 115 t.value = ';' 116 return t 117 118#--------------------------------------------------------------------- 119# define error function 120def t_ANY_error(t): 121 print("不正な文字 '%s'" % t.value[0]) 122 print(t.lineno) 123 t.lexer.skip(1) 124 125#--------------------------------------------------------------------- 126# declare instance 127lex.lex(debug=0) 128 129#--------------------------------------------------------------------- 130# main process 131 132# debug main 133def debug_main(): 134 #data = open('test.txt').read() 135 data = input() 136 lex.input(data) 137 while(True): 138 tok = lex.token() 139 if not tok: 140 break 141 142# debug entry point 143if __name__ == "__main__": 144 debug_main() 145

python

1#!/usr/bin/env python 2from ...ExImports import * 3import ply.yacc as yacc 4from .lex import tokens 5from ..Common import * 6 7def p_input(p): 8 'input : EBGUIDE VERSION ";" file_root' 9 p[0] = p[4] 10 11def p_flie_root(p): 12 'file_root : OBJ_ID object' 13 p[0] = p[1] 14 15def p_object(p): 16 'object : "{" properties "}"' 17 p[0] = p[2] 18 19def p_properties(p): 20 '''properties : 21 | properties simple_property 22 | properties data_binded_property 23 | properties nest_property''' 24 if (len(p) == 1): 25 p[0] = [] 26 return 27 p[0] = p[1] 28 p[0].append(p[2]) 29 30def p_simple_property(p): 31 ''' simple_property : PROP_ID SYMBOL SYMBOL text ";" 32 | PROP_ID SYMBOL SYMBOL NUMBER ";" 33 | PROP_ID SYMBOL SYMBOL BOOL ";" 34 | PROP_ID text SYMBOL text ";" 35 | PROP_ID text SYMBOL NUMBER ";" 36 | PROP_ID text SYMBOL BOOL ";" ''' 37 p[0] = p[1] 38 SimpleProperty(p[1], p[2], p[3], p[4]) 39 40def p_data_binded_property(p): 41 ''' data_binded_property : PROP_ID text SYMBOL prop_id ";" ''' 42 p[0] = p[1] 43 SimpleProperty(p[1], p[2], p[3], p[4]) 44 45def p_nest_property(p): 46 ''' nest_property : PROP_ID SYMBOL SYMBOL OBJ_ID object 47 | PROP_ID SYMBOL SYMBOL array ";" 48 | PROP_ID text SYMBOL OBJ_ID ";" 49 | PROP_ID text SYMBOL OBJ_ID object 50 | PROP_ID text SYMBOL array ";"''' 51 p[0] = p[1] 52 SimpleProperty(p[1], p[2], p[3], p[4]) 53 54def p_text(p): 55 '''text : 56 | TEXT''' 57 p[0] = reduce(lambda x, y: x + y, p[1:], "") 58 59def p_prop_id(p): 60 '''prop_id : PROP_ID 61 | OBJ_ID PROP_ID''' 62 p[0] = reduce(lambda x, y: x + y, p[1:], "") 63 64def p_array(p): 65 '''array : array_header "[" "]" 66 | array_header "[" obj_array "]" 67 | array_header "[" int_array "]" 68 | array_header "[" text_array "]" 69 | array_header "[" obj_ref_array "]" 70 | array_header "[" prop_ref_array "]"''' 71 p[0] = p[4] if len(p) != 4 else [] 72 73def p_array_header(p): 74 'array_header : "<" SYMBOL ">"' 75 76def p_obj_array(p): 77 '''obj_array : nameless_obj 78 | obj_array "," nameless_obj''' 79 p[0] = [] if len(p) == 2 else p[1] 80 p[0].append(p[-1]) 81 82def p_int_array(p): 83 '''int_array : NUMBER 84 | int_array "," NUMBER''' 85 p[0] = [] if len(p) == 2 else p[1] 86 p[0].append(p[-1]) 87 88def p_text_array(p): 89 '''text_array : TEXT 90 | text_array "," TEXT''' 91 p[0] = [] if len(p) == 2 else p[1] 92 p[0].append(p[-1]) 93 94def p_obj_ref_array(p): 95 '''obj_ref_array : OBJ_ID 96 | obj_ref_array "," OBJ_ID''' 97 p[0] = [] if len(p) == 2 else p[1] 98 p[0].append(p[-1]) 99 100def p_prop_ref_array(p): 101 '''prop_ref_array : prop_id 102 | prop_ref_array "," prop_id ''' 103 p[0] = [] if len(p) == 2 else p[1] 104 p[0].append(p[-1]) 105 106def p_nameless_obj(p): 107 'nameless_obj : SYMBOL OBJ_ID object' 108 p[0] = p[3] 109 110# syntax error 111def p_error(p): 112 print ('Syntax error in input %s' %p) 113 114parser = yacc.yacc() 115 116# Debug 117def parse(data, debug=0): 118 return yacc.parse(data, debug=debug) 119 120if __name__ == '__main__': 121 data = open('test.txt').read() 122 result = parser.parse(data)

投稿2018/05/05 08:03

編集2018/05/05 08:58
Thrush

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sigmacshaling

2018/05/06 03:22

回答ありがとうございます。 EBGuideを使っていると言うと、何だかまずい気がしたのですが、国内でもよく知られているツールなのですかね。
guest

0

一般的にファイル形式が定められているものの中では存じません。

これを扱うソフトウェアの仕様次第です。

投稿2018/05/05 05:26

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問