{"id":23769703,"url":"https://github.com/ni/tdms-parser","last_synced_at":"2025-09-05T14:32:43.442Z","repository":{"id":57555830,"uuid":"195888694","full_name":"ni/tdms-parser","owner":"ni","description":"Parser for NI TDMS files implemented in Elixir","archived":false,"fork":false,"pushed_at":"2020-02-20T10:38:32.000Z","size":58,"stargazers_count":3,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-10T19:24:50.368Z","etag":null,"topics":["elixir","tdms"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ni.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null}},"created_at":"2019-07-08T21:30:20.000Z","updated_at":"2024-09-02T17:08:52.000Z","dependencies_parsed_at":"2022-09-02T12:50:58.898Z","dependency_job_id":null,"html_url":"https://github.com/ni/tdms-parser","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ni/tdms-parser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ni%2Ftdms-parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ni%2Ftdms-parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ni%2Ftdms-parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ni%2Ftdms-parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ni","download_url":"https://codeload.github.com/ni/tdms-parser/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ni%2Ftdms-parser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273769866,"owners_count":25164876,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elixir","tdms"],"created_at":"2025-01-01T02:31:51.481Z","updated_at":"2025-09-05T14:32:38.390Z","avatar_url":"https://github.com/ni.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TDMS.Parser\n\n[![Build Status](https://travis-ci.org/ni/tdms-parser.svg?branch=master)](https://travis-ci.org/ni/tdms-parser)\n[![Coverage Status](https://coveralls.io/repos/github/ni/tdms-parser/badge.svg?branch=master)](https://coveralls.io/github/ni/tdms-parser?branch=master)\n[![Hex Version](https://img.shields.io/hexpm/v/tdms_parser.svg?style=flat)](https://hex.pm/packages/tdms_parser)\n[![Hex Docs](http://img.shields.io/badge/hex.pm-docs-green.svg?style=flat)](https://hexdocs.pm/tdms_parser)\n[![License](http://img.shields.io/hexpm/l/tdms_parser.svg?style=flat)](https://github.com/ni/tdms-parser/blob/master/LICENSE)\n\nParser for NI TDMS files written in Elixir. The TDMS file parser is implemented natively in elixir and comes with zero-dependencies.\n\nYou can see the API documentation [here](https://hexdocs.pm/tdms_parser).\n\n## Installation\n\nThe package can be installed by adding `tdms_parser` to your list of dependencies in `mix.exs`:\n\n```elixir\ndefp deps do\n  [\n    {:tdms_parser, \"~\u003e 0.0\"}\n  ]\nend\n```\n\n## Usage\n\nThe following command parses the given file and returns a TDMS.File structure.\n\n```elixir\niex\u003e TDMS.Parser.parse(File.read!(\"test/data/basic.tdms\"))\n```\n\n## TDMS File Format\n\nThe single, most important feature to understand about the internal format of the TDMS file structure is its inherent hierarchical organization. The TDMS file format is structured using three levels of hierarchy: file, group, and channel. The file level can contain groups, and each group can contain multiple channels.\n\nThe high-level description of the TDMS file format can be found at [The NI TDMS File Format](https://www.ni.com/product-documentation/3727/en/). \n\nFor a detailed description of all fields, their data types and byte representations see [TDMS File Format Internal Structure](https://www.ni.com/product-documentation/5696/en/).\n\n## Data Structures\n\n```elixir\n%TDMS.File{\n  path: \"/\",\n  properties: [\n    %TDMS.Property{\n      data_type: :string,\n      name: \"name\",\n      value: \"ni-crio-9068-190fdf5_20190609_235850.tdms\"\n    }\n  ],\n  groups: [\n    %TDMS.Group{\n      name: \"Temperature\",\n      path: \"/'Temperature'\",\n      properties: [\n        %TDMS.Property{data_type: :string, name: \"name\", value: \"Temperature\"}\n      ]\n      channels: [\n        %TDMS.Channel{\n          data: [24.172693869632123, 24.238202284912816, 24.22418907461031, ...],\n          data_count: 201,\n          data_type: :double,\n          name: \"ai.0\",\n          path: \"/'Temperature'/'ai.0'\",\n          properties: [\n            %TDMS.Property{data_type: :string, name: \"name\", value: \"ai.0\"},\n            %TDMS.Property{\n              data_type: :string,\n              name: \"datatype\",\n              value: \"DT_DOUBLE\"\n            },\n            ...\n          ]\n        },\n        %TDMS.Channel{\n          data: [24.07053512461277, 24.136787008557807, 24.128304594848682, ...],\n          data_count: 201,\n          data_type: :double,\n          name: \"ai.1\",\n          path: \"/'Temperature'/'ai.1'\",\n          properties: [\n            %TDMS.Property{data_type: :string, name: \"name\", value: \"ai.1\"},\n            %TDMS.Property{\n              data_type: :string,\n              name: \"datatype\",\n              value: \"DT_DOUBLE\"\n            },\n            ...\n          ]\n        },\n        ...\n      ]\n    }\n  ]\n}\n```\n\n## Build and Test\n\nBuild:\n```elixir\nmix compile\n```\n\nRun the unit tests:\n```elixir\nmix test --only unittest\n```\n\nRun the integration tests:\n```elixir\nmix test --only integration\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fni%2Ftdms-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fni%2Ftdms-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fni%2Ftdms-parser/lists"}