初回コミット
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// For Node.js environments that support TextDecoder
|
||||
// Using iconv-lite or manual Shift-JIS decoding
|
||||
const sjis = require('encoding');
|
||||
|
||||
const csvDir = './MoneyForwardエクスポート';
|
||||
|
||||
const files = fs.readdirSync(csvDir).filter(f => f.endsWith('.csv'));
|
||||
|
||||
const categories = new Map(); // key: "大項目|中項目", value: {institutions: Set, hasNonTransfer: boolean}
|
||||
const institutions = new Set();
|
||||
|
||||
files.forEach(file => {
|
||||
const filePath = path.join(csvDir, file);
|
||||
const buffer = fs.readFileSync(filePath);
|
||||
|
||||
// Try to decode from Shift-JIS
|
||||
let content;
|
||||
try {
|
||||
// Using Node.js built-in Buffer (assumes UTF-8, may fail)
|
||||
content = buffer.toString('utf8');
|
||||
} catch (e) {
|
||||
console.error(`Could not decode file: ${file}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const lines = content.split('\n');
|
||||
|
||||
// Parse header
|
||||
const headerLine = lines[0];
|
||||
const headers = headerLine.split(',');
|
||||
|
||||
const indices = {
|
||||
大項目: headers.indexOf('大項目'),
|
||||
中項目: headers.indexOf('中項目'),
|
||||
保有金融機関: headers.indexOf('保有金融機関'),
|
||||
振替: headers.indexOf('振替')
|
||||
};
|
||||
|
||||
console.log(`File: ${file}`);
|
||||
console.log(`Headers found:`, indices);
|
||||
|
||||
// Parse data rows
|
||||
for (let i = 1; i < lines.length; i++) {
|
||||
const line = lines[i].trim();
|
||||
if (!line) continue;
|
||||
|
||||
const fields = line.split(',');
|
||||
if (fields.length < Math.max(...Object.values(indices)) + 1) continue;
|
||||
|
||||
const category = fields[indices.大項目];
|
||||
const subCategory = fields[indices.中項目];
|
||||
const institution = fields[indices.保有金融機関];
|
||||
const transfer = fields[indices.振替];
|
||||
|
||||
if (!category || !subCategory) continue;
|
||||
|
||||
const key = `${category}|${subCategory}`;
|
||||
|
||||
if (!categories.has(key)) {
|
||||
categories.set(key, { institutions: new Set(), hasNonTransfer: false });
|
||||
}
|
||||
|
||||
categories.get(key).institutions.add(institution);
|
||||
if (transfer === '0') {
|
||||
categories.get(key).hasNonTransfer = true;
|
||||
}
|
||||
|
||||
institutions.add(institution);
|
||||
}
|
||||
});
|
||||
|
||||
console.log('\n=== UNIQUE CATEGORIES ===\n');
|
||||
console.log('大項目 | 中項目 | Institutions | Has Non-Transfer');
|
||||
console.log('-'.repeat(80));
|
||||
|
||||
const sortedCategories = Array.from(categories.entries()).sort();
|
||||
sortedCategories.forEach(([key, data]) => {
|
||||
const [大項目, 中項目] = key.split('|');
|
||||
const instList = Array.from(data.institutions).join('; ');
|
||||
console.log(`${大項目} | ${中項目} | ${instList} | ${data.hasNonTransfer ? 'Yes' : 'No'}`);
|
||||
});
|
||||
|
||||
console.log('\n=== INSTITUTIONS ===\n');
|
||||
Array.from(institutions).sort().forEach(inst => console.log(inst));
|
||||
Reference in New Issue
Block a user