{"id":24430723,"url":"https://github.com/gusanmaz/opticsv","last_synced_at":"2026-04-11T20:03:52.085Z","repository":{"id":78763786,"uuid":"116959423","full_name":"gusanmaz/opticsv","owner":"gusanmaz","description":" Csv generator from data acquired from scans made from Sekonic SR-1800 OMR","archived":false,"fork":false,"pushed_at":"2024-01-27T14:27:06.000Z","size":75,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-20T14:57:34.129Z","etag":null,"topics":["cli","csv","omr","omr-reader","optical-mark-recognition","sekonic","sr-1800"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gusanmaz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-10T13:11:20.000Z","updated_at":"2024-04-09T12:13:34.000Z","dependencies_parsed_at":"2024-01-26T15:25:00.345Z","dependency_job_id":"9afc287c-6179-448e-9eab-756f4a879d1e","html_url":"https://github.com/gusanmaz/opticsv","commit_stats":null,"previous_names":["gusanmaz/opticsv"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusanmaz%2Fopticsv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusanmaz%2Fopticsv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusanmaz%2Fopticsv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusanmaz%2Fopticsv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gusanmaz","download_url":"https://codeload.github.com/gusanmaz/opticsv/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243467024,"owners_count":20295309,"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","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":["cli","csv","omr","omr-reader","optical-mark-recognition","sekonic","sr-1800"],"created_at":"2025-01-20T14:57:38.307Z","updated_at":"2025-12-28T00:30:04.013Z","avatar_url":"https://github.com/gusanmaz.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dat to CSV Converter for Sekonic OMR Software\r\n\r\n## Overview\r\nThis tool serves as a backup solution for processing data from the Sekonic SR-1800 Optical Mark Reader (OMR) software used at our workplace. Sometimes the official software may fail to generate spreadsheet files from scanned optical papers, even though it can produce `.dat` files with the scan results. This converter takes those `.dat` files, along with corresponding `.key` files containing the answer keys, and generates a `.csv` file listing student IDs and their calculated scores.\r\n\r\n![Sekonic OMR Software Screenshot](images/sekonic_ss.png)\r\n\r\n## Installation\r\n\r\n### Prerequisites\r\n- **Go Programming Language**: This tool is implemented in Go. Ensure you have Go installed on your system to compile and execute the program. Go can be downloaded from the [official Go website](https://golang.org/dl/).\r\n\r\n### Compiling the Program\r\n1. **Clone the Repository**: First, clone the repository to your local machine or download the source code directly. Use the following command to clone the repository:\r\n    ```sh\r\n    git clone https://github.com/gusanmaz/opticsv.git\r\n    cd optikcsv\r\n    ```\r\n\r\n2. **Build the Program**: Compile the source code using the Go compiler. This will generate an executable file named `opticsv` (or `opticsv.exe` on Windows systems).\r\n    ```sh\r\n    go build -o opticsv\r\n    ```\r\n\r\n### Running the Program\r\nThe program requires the `-filename` argument to specify the base name of the `.dat` and `.key` files (without their extensions). For instance, if your files are named `exam1.dat` and `exam1.key`, execute the program as follows:\r\n```sh\r\n./opticsv -filename exam1\r\n```\r\nThis command will process the exam1.dat and exam1.key files located in the current directory and generate an exam1.csv file with student scores.\r\nUsage\r\n\r\nThe tool is designed to be straightforward. Specify the base filename of your .dat and .key files using the -filename flag when running the program from the command line. The tool will automatically calculate the scores based on the provided answer keys and generate a .csv file with the results.\r\nConfiguration\r\n\r\n#### .dat File\r\n\r\n.dat files are special files that are generated by Sekonic SR-1800 Optical Mark Reader (OMR) software when someone reads optical papers.\r\nAformentioned software uses .dat files to generate Excel files that are more readable. However, I personally find generating Excel files\r\nfrom this software clunky and this is one of the reasons why I created this program. Below you would find an example anonymized dat file.\r\n\r\n```text\r\nMERT KARADENIZ      2  8473621956BADEBCCBECBAABDDDBEAEDCAAEBDADDAACDBBDDCDEADBCADECC                                                                      \r\nFATMA SÖNMEZ        2  5387906214CCDCACEADBEAECBEAEDECEAADEEDEADBCABCABCCCADECBCDBBD                                                                      \r\nCAN DEMIR           2  4928753160CAACAEDAEBEAEEDBBECECBAADACDEDBDEDABADECCADACEBDABD\r\nAYŞE KAYA           2  7364829517ADCBBDDADBECEBEABEADECDAAABCAADABEBEDECEADAEADCABDA                                                                      \r\nBURAK ÖZTÜRK        2  6214738590BBDEBCCBEDBCABABDBEAECBECABBAEDDACABBADCDEADBAADCCC                                                                      \r\nHÜSEYIN YILDIZ      2  8347692513BADECCCBEACDEBBEDBEAEDCAACBBAEDAACDBBDACDEADACADECC                                                                      \r\nBATUHAN DEMIREL     2  9753164820DADEBECCEADBBDAADCCEACADECCECCDBBDBEAECDDBEAEBCABED                                                                      \r\nBESTE ARSLAN        2  8573916248AADBBDDCADECADEDBEAEECDABABEAEBADEBCDCCEADBEACAADBA                                                                      \r\nFARUK EGE AKIN      2  6482591736CCACEBDADBEAECBEAEDEAEAADEBDEADBCDCDEBCCCADECBCDBBD                                                                      \r\nUTKU HAKAN KOÇ      2  3196874521CCECBADAEBECDBDCBEDAAEAAEABDDADBEDCCECCCAACEDADDBBD\r\n```\r\n\r\n#### .key File\r\n\r\nKey file needs to be created by user to store answers to exam question. Below is an example .key file\r\n\r\n```text\r\nEBECAABDDAEDCDACBDBEDCCBACDDECBBEADDEEDCBACACDEDEEBC\r\nDCDEDBECCADBBEDECCEDBBDBACEABDDCBEDDBAEDABEADBEEECBD\r\nBACABDEACACDEBBDCEBBACDBDDCAEACABDCBDECDDBEEBBCCBDAA\r\nEDDCDEBEAADCCDDBBCAEDDACCABEDDABBDCDBBAAACDCCDACADBC\r\n```\r\n\r\nAbove top row is answer key for sheet:A, The row one below is answer key for sheet: B and bottom row is answer key for sheet D.\r\nNotice there are 50 questions on the exam for which this .key file is created. For sheet A answer to first question is E and \r\nanswer to last three questions are E, B, C consecutively.\r\n\r\nBelow is another example .key file. This time there is only sheet A and there are only 10 questions. \r\n\r\n```text\r\nABCDEAABBC\r\n```\r\n\r\nBelow is another example .key file. This time not all questions worth the same. Second question's point value of 19 is \r\nindicated in key file. To sum total point value to 100 other questions point value is set to 9 by the program if default\r\nvalue of 100 for total points is not overwritten with CLI argument.\r\n\r\n```text\r\nAB:19CDEAABBC\r\n```\r\n\r\nYou could set point value of any question by appending :{number} after answer to that question. You could use this feature\r\nfor both single line and multiline (multiple question sheet exam) key file.\r\n\r\n\r\n\r\nThe program automatically determines the number of questions from the length of the answer keys in the .key file and assumes each exam's total score is 100 points if it is not altered via CLI argument, distributing the points evenly across all questions after setting predetermined points to indicated questions in key file.\r\n### Notes\r\n\r\nThe tool gracefully handles cases where student numbers are incomplete or certain answers are left unmarked, ensuring these instances are reported but not included in the final .csv file.\r\nFor exams with multiple versions of answer sheets, the .key file can contain multiple lines, each corresponding to a different version (A, B, C, D, etc.).\r\n\r\n### Author\r\n\r\nGüvenç Usanmaz\r\n\r\n### License\r\n\r\nThis project is licensed under the MIT License - see the LICENSE.md file for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusanmaz%2Fopticsv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgusanmaz%2Fopticsv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusanmaz%2Fopticsv/lists"}