work on parsing text file entry into json

This commit is contained in:
Paul Trowbridge 2023-06-02 23:36:05 -04:00
parent ca2f0fdc0e
commit 38c3d42117
5 changed files with 188 additions and 0 deletions

13
main.gl Normal file
View File

@ -0,0 +1,13 @@
2023-05-21 Opening balance sheet
Assets:Cash:Huntington 43568.25
Liabilities:Credit:Discover -3692.25
Liabilities:Credit:Chase -1176.50
Liabilities:Credit:Lowes -100.00
Liabilities:Credit:Kohls -85.49
Assets:401k:Fidelity 13274.58
Assets:401k:PrincipalPPG 24383.25
Assets:401k:PrincipalHC 94470.35
Assets:401k:FidelityMasco 13274.58
Assets:401k:STRS 10000.00

48
next.js Normal file
View File

@ -0,0 +1,48 @@
const fs = require('fs');
function parseJournalEntries(filePath) {
const entries = [];
let currentEntry = null;
try {
const data = fs.readFileSync(filePath, 'utf8');
const lines = data.split('\n');
for (let line of lines) {
//line = line.trim(); // Trim leading/trailing whitespace
const regex = /^(\d{4}-\d{2}-\d{2})\s(.*)$/;
const match = line.match(regex);
if (match) {
const date = match[1];
const descr = match[2];
currentEntry = { entries: [] };
currentEntry.entries.push({ date, descr });
entries.push(currentEntry);
} else {
const regex = /[^\s+]([\w\d:.]+)/g;
const match = line.match(regex);
if (match) {
const acct = match[0];
const amount = match[1];
currentEntry.entries.push({ acct, amount });
}
}
}
} catch (error) {
console.error('Error reading the file:', error);
}
return entries;
}
function convertToJson(entries) {
return JSON.stringify(entries, null, 4);
}
const journalEntries = parseJournalEntries('main.gl');
const jsonData = convertToJson(journalEntries);
console.log(jsonData);

33
next.py Normal file
View File

@ -0,0 +1,33 @@
import json
def parse_journal_entries(file_path):
entries = []
current_entry = None
with open(file_path, 'r') as file:
for line in file:
line = line.strip()
if line.startswith(''):
account, amount = line[1:].split()
current_entry['entries'].append({
'account': account,
'amount': float(amount)
})
elif line:
if current_entry is not None:
entries.append(current_entry)
current_entry = {'date': line, 'entries': []}
if current_entry is not None:
entries.append(current_entry)
return entries
def convert_to_json(entries):
return json.dumps(entries, indent=4)
file_path = 'main.gl'
journal_entries = parse_journal_entries(file_path)
json_data = convert_to_json(journal_entries)
print(json_data)

50
parse.js Normal file
View File

@ -0,0 +1,50 @@
const fs = require('fs');
function parseTextFile(filePath) {
const content = fs.readFileSync(filePath, 'utf-8');
const lines = content.split('\n');
const entries = [];
let currentEntry = {};
for (let i = 0; i < lines.length; i++) {
const line = lines[i].trim();
if (line !== '') {
const parts = line.split(/\s+/);
if (parts.length === 1) {
// New entry detected, push the current entry to the entries array
if (Object.keys(currentEntry).length > 0) {
entries.push(currentEntry);
}
// Create a new entry object
currentEntry = {
header: line,
details: [],
};
} else {
const account = parts[0];
const amount = parseFloat(parts[1]);
currentEntry.details.push({
account,
amount,
});
}
}
}
// Push the last entry to the entries array
if (Object.keys(currentEntry).length > 0) {
entries.push(currentEntry);
}
return entries;
}
// Usage: Provide the path to your text file here
const filePath = 'main.gl';
const entries = parseTextFile(filePath);
console.log(entries);

44
parse.py Normal file
View File

@ -0,0 +1,44 @@
import json
def parse_journal_entries(file_path):
entries = []
current_entry = {}
with open(file_path, 'r') as file:
for line in file:
line = line.strip()
if line.startswith(''):
account, amount = line[1:].split()
current_entry['entries'].append({
'account': account,
'amount': float(amount)
})
elif line:
if current_entry:
entries.append(current_entry)
current_entry = {'date': line, 'entries': []}
if current_entry:
entries.append(current_entry)
return entries
def convert_to_json(entries):
formatted_entries = []
for entry in entries:
formatted_entry = {
'date': entry['date'],
'entries': []
}
for sub_entry in entry['entries']:
formatted_entry['entries'].append({
sub_entry['account']: sub_entry['amount']
})
formatted_entries.append(formatted_entry)
return json.dumps(formatted_entries, indent=4)
file_path = 'main.gl'
journal_entries = parse_journal_entries(file_path)
json_data = convert_to_json(journal_entries)
print(json_data)