<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
	<channel>
		<title>Textractor</title>
		<link>/blogentry/196882</link>
		<atom:link href="https://www.lotterypost.com/rss/blogcomments/196882" rel="self" type="application/rss+xml" />
		<description>Il2c's Blog: Textractor</description>
		<dc:language>en-us</dc:language>
		<generator>Lottery Post RSS Generator</generator>
		<item>
			<title>Original Blog Entry: Textractor</title>
			<link>/blogentry/196882</link>
			<guid isPermaLink="true">/blogentry/196882</guid>
			<pubDate>Mon, 26 Jan 2026 05:58:29 GMT</pubDate>
			<dc:creator>Il2c</dc:creator>
			<description><![CDATA[<p>Textractor, the utility tool I was talking about. This tool is soooo cool, and useful for what I do.<br /><br />I use it alot and updated it to v3.<br /><br />Adding file input, and the option to export certain lines for certain data.<br /><br />Free Share Use. If you do decide to redistribute it, send a link back to the site / this blog.<br /><br />!DOCTYPE html<br /><br />html lang= en<br /><br />head<br /><br />meta charset= UTF-8<br /><br />meta name= viewport content= width=device-width, initial-scale=1.0<br /><br />title TEXTractor v3 /title<br /><br />!-- Import Inter Font from Google Fonts --<br /><br />link rel= preconnect href= https://fonts.googleapis.com<br /><br />link rel= preconnect href= https://fonts.gstatic.com crossorigin<br /><br />link href= https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600 display=swap rel= stylesheet<br /><br />style<br /><br />/* CSS Reset Base */<br /><br />* {<br /><br />margin: 0;<br /><br />padding: 0;<br /><br />box-sizing: border-box;<br /><br />}<br /><br />body {<br /><br />font-family: &#x27;Inter&#x27;, sans-serif;<br /><br />font-weight: 400;<br /><br />background-color: #f8f9fa;<br /><br />color: #2d3748;<br /><br />line-height: 1.6;<br /><br />padding: 20px;<br /><br />max-width: 1200px;<br /><br />margin: 0 auto;<br /><br />padding-top: 80px; /* Space for tabs */<br /><br />}<br /><br />h1, h2, h3 {<br /><br />font-weight: 600;<br /><br />color: #1a202c;<br /><br />margin-bottom: 0.5rem;<br /><br />}<br /><br />h1 {<br /><br />font-size: 2.5rem;<br /><br />border-bottom: 3px solid #4299e1;<br /><br />padding-bottom: 10px;<br /><br />margin-bottom: 20px;<br /><br />}<br /><br />h2 {<br /><br />font-size: 1.5rem;<br /><br />margin-top: 1rem;<br /><br />}<br /><br />/* Tab Navigation - FLAT STYLE */<br /><br />.tab-nav {<br /><br />position: fixed;<br /><br />top: 20px;<br /><br />left: 20px;<br /><br />right: 20px;<br /><br />max-width: 1200px;<br /><br />margin: 0 auto;<br /><br />background: white;<br /><br />border-radius: 4px;<br /><br />border: 1px solid #cbd5e0;<br /><br />display: flex;<br /><br />z-index: 100;<br /><br />}<br /><br />.tab-btn {<br /><br />flex: 1;<br /><br />padding: 14px 20px;<br /><br />border: none;<br /><br />background: none;<br /><br />font-family: &#x27;Inter&#x27;, sans-serif;<br /><br />font-weight: 500;<br /><br />font-size: 1rem;<br /><br />color: #718096;<br /><br />cursor: pointer;<br /><br />transition: all 0.2s ease;<br /><br />border-bottom: 3px solid transparent;<br /><br />}<br /><br />.tab-btn:hover {<br /><br />color: #4a5568;<br /><br />background-color: #f7fafc;<br /><br />}<br /><br />.tab-btn.active {<br /><br />color: #4299e1;<br /><br />border-bottom-color: #4299e1;<br /><br />font-weight: 600;<br /><br />}<br /><br />.tab-content {<br /><br />display: none;<br /><br />}<br /><br />.tab-content.active {<br /><br />display: block;<br /><br />}<br /><br />/* Main Container Sections - FLAT STYLE */<br /><br />.container {<br /><br />background-color: #ffffff;<br /><br />border-radius: 6px;<br /><br />border: 1px solid #cbd5e0;<br /><br />padding: 30px;<br /><br />margin-bottom: 25px;<br /><br />}<br /><br />/* Collapsible Section Styling - FLAT STYLE */<br /><br />.collapsible {<br /><br />background-color: #edf2f7;<br /><br />border: 1px solid #cbd5e0;<br /><br />border-radius: 6px;<br /><br />margin-bottom: 15px;<br /><br />overflow: hidden;<br /><br />}<br /><br />.collapsible-header {<br /><br />padding: 12px 16px;<br /><br />cursor: pointer;<br /><br />display: flex;<br /><br />justify-content: space-between;<br /><br />align-items: center;<br /><br />font-weight: 500;<br /><br />transition: background-color 0.2s ease;<br /><br />}<br /><br />.collapsible-header:hover {<br /><br />background-color: #e2e8f0;<br /><br />}<br /><br />.collapsible-header::after {<br /><br />content: &#x27; &#x27;;<br /><br />font-size: 0.8rem;<br /><br />transition: transform 0.3s ease;<br /><br />}<br /><br />.collapsible-header.active::after {<br /><br />transform: rotate(180deg);<br /><br />}<br /><br />.collapsible-content {<br /><br />padding: 0 20px;<br /><br />max-height: 0;<br /><br />overflow: hidden;<br /><br />transition: max-height 0.3s ease-out, padding 0.3s ease;<br /><br />background-color: #ffffff;<br /><br />border-top: 1px solid #cbd5e0;<br /><br />}<br /><br />.collapsible-content.expanded {<br /><br />padding: 20px;<br /><br />max-height: 2000px;<br /><br />}<br /><br />/* Form and Input Styling */<br /><br />label {<br /><br />display: block;<br /><br />font-weight: 500;<br /><br />margin-bottom: 8px;<br /><br />color: #4a5568;<br /><br />}<br /><br />textarea, input[type= text ] {<br /><br />width: 100%;<br /><br />padding: 14px;<br /><br />border: 1px solid #cbd5e0;<br /><br />border-radius: 6px;<br /><br />font-family: &#x27;Inter&#x27;, sans-serif;<br /><br />font-size: 1rem;<br /><br />margin-bottom: 20px;<br /><br />background-color: #fff;<br /><br />transition: border 0.2s;<br /><br />resize: vertical;<br /><br />}<br /><br />textarea:focus, input[type= text ]:focus {<br /><br />outline: none;<br /><br />border-color: #4299e1;<br /><br />}<br /><br />#inputData {<br /><br />min-height: 220px;<br /><br />}<br /><br />#results {<br /><br />min-height: 150px;<br /><br />background-color: #f7fafc;<br /><br />font-family: monospace;<br /><br />white-space: pre-wrap;<br /><br />word-wrap: break-word;<br /><br />}<br /><br />/* File Upload Styling */<br /><br />.upload-section {<br /><br />margin-bottom: 20px;<br /><br />padding: 15px;<br /><br />background-color: #f7fafc;<br /><br />border: 1px solid #cbd5e0;<br /><br />border-radius: 6px;<br /><br />}<br /><br />.upload-row {<br /><br />display: flex;<br /><br />align-items: center;<br /><br />gap: 15px;<br /><br />flex-wrap: wrap;<br /><br />}<br /><br />.file-input-wrapper {<br /><br />flex: 1;<br /><br />min-width: 200px;<br /><br />}<br /><br />#fileUpload {<br /><br />width: 100%;<br /><br />padding: 10px;<br /><br />border: 1px solid #cbd5e0;<br /><br />border-radius: 6px;<br /><br />background-color: white;<br /><br />}<br /><br />#fileName {<br /><br />font-size: 0.9rem;<br /><br />color: #718096;<br /><br />font-style: italic;<br /><br />}<br /><br />/* Button Styling - FLAT STYLE */<br /><br />.button-group {<br /><br />display: flex;<br /><br />gap: 15px;<br /><br />flex-wrap: wrap;<br /><br />margin-top: 10px;<br /><br />}<br /><br />.download-group {<br /><br />display: flex;<br /><br />gap: 15px;<br /><br />flex-wrap: wrap;<br /><br />margin-top: 20px;<br /><br />}<br /><br />button {<br /><br />padding: 14px 28px;<br /><br />border: 1px solid #cbd5e0;<br /><br />border-radius: 6px;<br /><br />font-family: &#x27;Inter&#x27;, sans-serif;<br /><br />font-weight: 600;<br /><br />font-size: 1rem;<br /><br />cursor: pointer;<br /><br />transition: all 0.2s ease;<br /><br />display: inline-flex;<br /><br />align-items: center;<br /><br />justify-content: center;<br /><br />gap: 8px;<br /><br />background-color: white;<br /><br />}<br /><br />#extractBtn {<br /><br />background-color: #4299e1;<br /><br />color: white;<br /><br />border-color: #3182ce;<br /><br />}<br /><br />#extractBtn:hover {<br /><br />background-color: #3182ce;<br /><br />}<br /><br />.download-btn {<br /><br />background-color: #48bb78;<br /><br />color: white;<br /><br />border-color: #38a169;<br /><br />}<br /><br />.download-btn:hover {<br /><br />background-color: #38a169;<br /><br />}<br /><br />#clearBtn, #clearInputBtn {<br /><br />background-color: #a0aec0;<br /><br />color: white;<br /><br />border-color: #718096;<br /><br />}<br /><br />#clearBtn:hover, #clearInputBtn:hover {<br /><br />background-color: #718096;<br /><br />}<br /><br />button:disabled {<br /><br />opacity: 0.5;<br /><br />cursor: not-allowed;<br /><br />}<br /><br />.input-actions {<br /><br />display: flex;<br /><br />justify-content: flex-end;<br /><br />margin-top: 10px;<br /><br />}<br /><br />#clearInputBtn {<br /><br />padding: 10px 20px;<br /><br />font-size: 0.9rem;<br /><br />}<br /><br />/* Info Stats */<br /><br />.info-box {<br /><br />background-color: #ebf8ff;<br /><br />border-left: 4px solid #4299e1;<br /><br />padding: 16px;<br /><br />border-radius: 4px;<br /><br />margin: 20px 0;<br /><br />}<br /><br />.stats {<br /><br />font-size: 0.9rem;<br /><br />color: #718096;<br /><br />margin-top: 15px;<br /><br />padding-top: 15px;<br /><br />border-top: 1px solid #cbd5e0;<br /><br />display: flex;<br /><br />justify-content: space-between;<br /><br />align-items: center;<br /><br />flex-wrap: wrap;<br /><br />gap: 10px;<br /><br />}<br /><br />.stat-number {<br /><br />font-weight: 600;<br /><br />color: #2d3748;<br /><br />}<br /><br />/* Guide Content */<br /><br />.guide-content {<br /><br />line-height: 1.7;<br /><br />}<br /><br />.guide-content h3 {<br /><br />margin-top: 1.5rem;<br /><br />margin-bottom: 0.75rem;<br /><br />color: #2d3748;<br /><br />}<br /><br />.guide-content ul, .guide-content ol {<br /><br />margin-left: 1.5rem;<br /><br />margin-bottom: 1rem;<br /><br />}<br /><br />.guide-content li {<br /><br />margin-bottom: 0.5rem;<br /><br />}<br /><br />.guide-content code {<br /><br />background-color: #edf2f7;<br /><br />padding: 2px 6px;<br /><br />border-radius: 4px;<br /><br />font-family: &#x27;Monaco&#x27;, &#x27;Menlo&#x27;, monospace;<br /><br />font-size: 0.9em;<br /><br />color: #2d3748;<br /><br />}<br /><br />/* Scroll to Top Button */<br /><br />#scrollTopBtn {<br /><br />position: fixed;<br /><br />bottom: 30px;<br /><br />right: 30px;<br /><br />width: 50px;<br /><br />height: 50px;<br /><br />border-radius: 6px;<br /><br />background-color: #4299e1;<br /><br />color: white;<br /><br />border: 1px solid #3182ce;<br /><br />cursor: pointer;<br /><br />opacity: 0;<br /><br />visibility: hidden;<br /><br />transition: all 0.3s ease;<br /><br />z-index: 99;<br /><br />font-size: 1.2rem;<br /><br />display: flex;<br /><br />align-items: center;<br /><br />justify-content: center;<br /><br />}<br /><br />#scrollTopBtn.visible {<br /><br />opacity: 1;<br /><br />visibility: visible;<br /><br />}<br /><br />#scrollTopBtn:hover {<br /><br />background-color: #3182ce;<br /><br />}<br /><br />/* Footer */<br /><br />footer {<br /><br />text-align: center;<br /><br />margin-top: 40px;<br /><br />color: #718096;<br /><br />font-size: 0.9rem;<br /><br />padding: 20px;<br /><br />}<br /><br />/style<br /><br />/head<br /><br />body<br /><br />!-- Tab Navigation --<br /><br />div class= tab-nav<br /><br />button class= tab-btn active data-tab= extractor Extractor /button<br /><br />button class= tab-btn data-tab= guide Guide /button<br /><br />/div<br /><br />header<br /><br />h1 TEXTractor v3 /h1<br /><br />p class= info-box Extract 3-digit and 4-digit numbers from your text. Upload files, extract data, and download odd/even line results. /p<br /><br />/header<br /><br />!-- Extractor Tab Content --<br /><br />div id= extractor-tab class= tab-content active<br /><br />main<br /><br />!-- Input Section --<br /><br />section class= container<br /><br />div class= collapsible<br /><br />div class= collapsible-header active<br /><br />h2 Step 1: Input Your Text Data /h2<br /><br />/div<br /><br />div class= collapsible-content expanded<br /><br />!-- File Upload Section --<br /><br />div class= upload-section<br /><br />p strong Upload a text file: /strong /p<br /><br />div class= upload-row<br /><br />div class= file-input-wrapper<br /><br />input type= file id= fileUpload accept= .txt,.csv,.text<br /><br />div id= fileName No file chosen /div<br /><br />/div<br /><br />button id= clearInputBtn<br /><br />span /span Clear Input<br /><br />/button<br /><br />/div<br /><br />/div<br /><br />p Or paste/type your data below. TEXTractor will scan this area for 3 and 4-digit numbers. /p<br /><br />label for= inputData Input Data: /label<br /><br />textarea id= inputData placeholder= Paste your data here... For example:<br /><br />1<br /><br />321<br /><br />078<br /><br />2<br /><br />234<br /><br />985<br /><br />... /textarea<br /><br />div class= stats<br /><br />div<br /><br />span Character Count: span id= charCount class= stat-number 0 /span /span |<br /><br />span Line Count: span id= lineCount class= stat-number 0 /span /span<br /><br />/div<br /><br />/div<br /><br />/div<br /><br />/div<br /><br />/section<br /><br />!-- Action Output Section --<br /><br />section class= container<br /><br />div class= collapsible<br /><br />div class= collapsible-header active<br /><br />h2 Step 2: Extract Download /h2<br /><br />/div<br /><br />div class= collapsible-content expanded<br /><br />div class= button-group<br /><br />button id= extractBtn<br /><br />span /span Extract Numbers<br /><br />/button<br /><br />button id= clearBtn<br /><br />span /span Clear All<br /><br />/button<br /><br />/div<br /><br />label for= results Extracted Numbers (3-digit and 4-digit only): /label<br /><br />textarea id= results readonly placeholder= Your extracted numbers will appear here... /textarea<br /><br />div class= stats<br /><br />span Numbers Found: span id= numbersCount class= stat-number 0 /span /span |<br /><br />span 3-digit: span id= threeDigitCount class= stat-number 0 /span /span |<br /><br />span 4-digit: span id= fourDigitCount class= stat-number 0 /span /span<br /><br />/div<br /><br />!-- Download Options --<br /><br />div class= download-group<br /><br />button id= downloadAllBtn class= download-btn disabled<br /><br />span /span Download All<br /><br />/button<br /><br />button id= downloadOddBtn class= download-btn disabled<br /><br />span /span Download Odd Lines<br /><br />/button<br /><br />button id= downloadEvenBtn class= download-btn disabled<br /><br />span /span Download Even Lines<br /><br />/button<br /><br />/div<br /><br />p small em Odd lines: 1, 3, 5, 7... | Even lines: 2, 4, 6, 8... /em /small /p<br /><br />/div<br /><br />/div<br /><br />/section<br /><br />/main<br /><br />/div<br /><br />!-- Guide Tab Content --<br /><br />div id= guide-tab class= tab-content<br /><br />section class= container<br /><br />div class= guide-content<br /><br />h2 How TEXTractor v3 Works /h2<br /><br />h3 Extraction Logic /h3<br /><br />p The tool scans your input line-by-line and extracts sequences that match the following rules: /p<br /><br />ul<br /><br />li strong 3-digit numbers: /strong Exactly three consecutive digits (e.g., code 123 /code , code 045 /code ). /li<br /><br />li strong 4-digit numbers: /strong Exactly four consecutive digits (e.g., code 4567 /code , code 1001 /code ). /li<br /><br />/ul<br /><br />p Numbers with fewer than 3 or more than 4 digits are ignored. Each extracted number is placed on its own line in the results. /p<br /><br />h3 New in v3: Position-Based Downloads /h3<br /><br />ul<br /><br />li strong Download All: /strong All extracted numbers (original behavior) /li<br /><br />li strong Download Odd Lines: /strong Lines 1, 3, 5, 7, 9... from the results /li<br /><br />li strong Download Even Lines: /strong Lines 2, 4, 6, 8, 10... from the results /li<br /><br />/ul<br /><br />h3 File Upload /h3<br /><br />p Upload code .txt /code or code .csv /code files to automatically load text into the input field. /p<br /><br />h3 Example /h3<br /><br />p Input: code ID: 12345 Code: 987 and 555 and 10000 /code br<br /><br />Output: code 987 /code (only the 3-digit number is extracted; 12345 is 5-digit, 10000 is 5-digit). /p<br /><br />h3 Important Notes /h3<br /><br />ul<br /><br />li Numbers with leading zeros are included (e.g., 012, 0015) /li<br /><br />li The tool uses word boundaries, so numbers within words won&#x27;t be extracted /li<br /><br />li Each extracted number appears on a separate line /li<br /><br />li Large inputs are processed quickly without page freezing /li<br /><br />/ul<br /><br />h3 Keyboard Shortcuts /h3<br /><br />ul<br /><br />li strong Ctrl/Cmd + Enter: /strong Extract numbers /li<br /><br />li strong Ctrl/Cmd + S: /strong Download all results /li<br /><br />li strong Tab: /strong Navigate between elements /li<br /><br />/ul<br /><br />h3 Tips for Best Results /h3<br /><br />ol<br /><br />li Upload text files or paste data directly /li<br /><br />li Use Clear Input to reset only the input field /li<br /><br />li Use Clear All to reset both input and results /li<br /><br />li Choose the appropriate download option based on your needs /li<br /><br />li Check the stats to verify extraction counts /li<br /><br />/ol<br /><br />/div<br /><br />/section<br /><br />/div<br /><br />!-- Scroll to Top Button --<br /><br />button id= scrollTopBtn aria-label= Scroll to top /button<br /><br />footer<br /><br />p TEXTractor v3 Enhanced extraction with position-based downloads and file upload. /p<br /><br />/footer<br /><br />script<br /><br />// ==================== DOM Elements ====================<br /><br />const inputDataTextarea = document.getElementById(&#x27;inputData&#x27;);<br /><br />const resultsTextarea = document.getElementById(&#x27;results&#x27;);<br /><br />const extractBtn = document.getElementById(&#x27;extractBtn&#x27;);<br /><br />const downloadAllBtn = document.getElementById(&#x27;downloadAllBtn&#x27;);<br /><br />const downloadOddBtn = document.getElementById(&#x27;downloadOddBtn&#x27;);<br /><br />const downloadEvenBtn = document.getElementById(&#x27;downloadEvenBtn&#x27;);<br /><br />const clearBtn = document.getElementById(&#x27;clearBtn&#x27;);<br /><br />const clearInputBtn = document.getElementById(&#x27;clearInputBtn&#x27;);<br /><br />const fileUpload = document.getElementById(&#x27;fileUpload&#x27;);<br /><br />const fileName = document.getElementById(&#x27;fileName&#x27;);<br /><br />const charCountSpan = document.getElementById(&#x27;charCount&#x27;);<br /><br />const lineCountSpan = document.getElementById(&#x27;lineCount&#x27;);<br /><br />const numbersCountSpan = document.getElementById(&#x27;numbersCount&#x27;);<br /><br />const threeDigitCountSpan = document.getElementById(&#x27;threeDigitCount&#x27;);<br /><br />const fourDigitCountSpan = document.getElementById(&#x27;fourDigitCount&#x27;);<br /><br />const scrollTopBtn = document.getElementById(&#x27;scrollTopBtn&#x27;);<br /><br />const tabBtns = document.querySelectorAll(&#x27;.tab-btn&#x27;);<br /><br />const tabContents = document.querySelectorAll(&#x27;.tab-content&#x27;);<br /><br />// Store extracted numbers array globally<br /><br />let extractedNumbers = [];<br /><br />// ==================== Tab Navigation ====================<br /><br />tabBtns.forEach(btn = {<br /><br />btn.addEventListener(&#x27;click&#x27;, function() {<br /><br />const tabId = this.getAttribute(&#x27;data-tab&#x27;);<br /><br />// Update active tab button<br /><br />tabBtns.forEach(b = b.classList.remove(&#x27;active&#x27;));<br /><br />this.classList.add(&#x27;active&#x27;);<br /><br />// Show corresponding tab content<br /><br />tabContents.forEach(content = content.classList.remove(&#x27;active&#x27;));<br /><br />document.getElementById(`${tabId}-tab`).classList.add(&#x27;active&#x27;);<br /><br />// Scroll to top when switching tabs<br /><br />window.scrollTo({ top: 0, behavior: &#x27;smooth&#x27; });<br /><br />});<br /><br />});<br /><br />// ==================== Collapsible Sections ====================<br /><br />document.querySelectorAll(&#x27;.collapsible-header&#x27;).forEach(header = {<br /><br />header.addEventListener(&#x27;click&#x27;, function() {<br /><br />this.classList.toggle(&#x27;active&#x27;);<br /><br />const content = this.nextElementSibling;<br /><br />content.classList.toggle(&#x27;expanded&#x27;);<br /><br />});<br /><br />});<br /><br />// ==================== File Upload Handler ====================<br /><br />fileUpload.addEventListener(&#x27;change&#x27;, function(e) {<br /><br />const file = e.target.files[0];<br /><br />if (!file) return;<br /><br />fileName.textContent = file.name;<br /><br />// Check if file is text-based<br /><br />if (!file.type.includes(&#x27;text/&#x27;) !file.name.endsWith(&#x27;.txt&#x27;) !file.name.endsWith(&#x27;.csv&#x27;)) {<br /><br />alert(&#x27;Please upload a text file (.txt or .csv)&#x27;);<br /><br />fileUpload.value = &#x27;&#x27;;<br /><br />fileName.textContent = &#x27;No file chosen&#x27;;<br /><br />return;<br /><br />}<br /><br />const reader = new FileReader();<br /><br />reader.onload = function(event) {<br /><br />inputDataTextarea.value = event.target.result;<br /><br />updateInputStats();<br /><br />// Auto-scroll to show the loaded content<br /><br />inputDataTextarea.scrollIntoView({ behavior: &#x27;smooth&#x27;, block: &#x27;nearest&#x27; });<br /><br />};<br /><br />reader.onerror = function() {<br /><br />alert(&#x27;Error reading file. Please try again.&#x27;);<br /><br />fileUpload.value = &#x27;&#x27;;<br /><br />fileName.textContent = &#x27;No file chosen&#x27;;<br /><br />};<br /><br />reader.readAsText(file);<br /><br />});<br /><br />// ==================== Input Statistics ====================<br /><br />function updateInputStats() {<br /><br />const text = inputDataTextarea.value;<br /><br />charCountSpan.textContent = text.length;<br /><br />lineCountSpan.textContent = text.split(&#x27;\n&#x27;).length;<br /><br />}<br /><br />inputDataTextarea.addEventListener(&#x27;input&#x27;, updateInputStats);<br /><br />window.addEventListener(&#x27;load&#x27;, updateInputStats);<br /><br />// ==================== Core Extraction Logic ====================<br /><br />function extractNumbers(text) {<br /><br />const regex = /\b\d{3}\b|\b\d{4}\b/g;<br /><br />const matches = text.match(regex) || [];<br /><br />return matches;<br /><br />}<br /><br />function updateResultsStats(numbersArray) {<br /><br />const threeDigit = numbersArray.filter(num = num.length === 3).length;<br /><br />const fourDigit = numbersArray.filter(num = num.length === 4).length;<br /><br />numbersCountSpan.textContent = numbersArray.length;<br /><br />threeDigitCountSpan.textContent = threeDigit;<br /><br />fourDigitCountSpan.textContent = fourDigit;<br /><br />// Enable download buttons if we have results<br /><br />const hasResults = numbersArray.length 0;<br /><br />downloadAllBtn.disabled = !hasResults;<br /><br />downloadOddBtn.disabled = !hasResults;<br /><br />downloadEvenBtn.disabled = !hasResults;<br /><br />}<br /><br />// ==================== Position-Based Filtering ====================<br /><br />function filterOddLines(numbersArray) {<br /><br />return numbersArray.filter((_, index) = index % 2 === 0); // 0-indexed: 0, 2, 4...<br /><br />}<br /><br />function filterEvenLines(numbersArray) {<br /><br />return numbersArray.filter((_, index) = index % 2 === 1); // 0-indexed: 1, 3, 5...<br /><br />}<br /><br />// ==================== Download Helper Function ====================<br /><br />function downloadTextFile(content, filename) {<br /><br />const blob = new Blob([content], { type: &#x27;text/plain&#x27; });<br /><br />const url = URL.createObjectURL(blob);<br /><br />const a = document.createElement(&#x27;a&#x27;);<br /><br />a.href = url;<br /><br />a.download = filename;<br /><br />document.body.appendChild(a);<br /><br />a.click();<br /><br />document.body.removeChild(a);<br /><br />URL.revokeObjectURL(url);<br /><br />}<br /><br />// ==================== Button Event Handlers ====================<br /><br />extractBtn.addEventListener(&#x27;click&#x27;, function() {<br /><br />const inputText = inputDataTextarea.value;<br /><br />extractedNumbers = extractNumbers(inputText);<br /><br />// Format results: one number per line<br /><br />resultsTextarea.value = extractedNumbers.join(&#x27;\n&#x27;);<br /><br />// Update statistics<br /><br />updateResultsStats(extractedNumbers);<br /><br />// Briefly animate the extract button<br /><br />this.style.transform = &#x27;scale(0.98)&#x27;;<br /><br />setTimeout(() = { this.style.transform = &#x27;scale(1)&#x27;; }, 150);<br /><br />// Auto-scroll to results if they&#x27;re long<br /><br />if (extractedNumbers.length 10) {<br /><br />resultsTextarea.scrollIntoView({ behavior: &#x27;smooth&#x27;, block: &#x27;nearest&#x27; });<br /><br />}<br /><br />});<br /><br />// Download All<br /><br />downloadAllBtn.addEventListener(&#x27;click&#x27;, function() {<br /><br />if (extractedNumbers.length === 0) return;<br /><br />const resultText = extractedNumbers.join(&#x27;\n&#x27;);<br /><br />downloadTextFile(resultText, `TEXTractor_All_${new Date().toISOString().slice(0,10)}.txt`);<br /><br />// Visual feedback<br /><br />this.innerHTML = &#x27; span /span Downloaded All!&#x27;;<br /><br />setTimeout(() = {<br /><br />this.innerHTML = &#x27; span /span Download All&#x27;;<br /><br />}, 1500);<br /><br />});<br /><br />// Download Odd Lines<br /><br />downloadOddBtn.addEventListener(&#x27;click&#x27;, function() {<br /><br />if (extractedNumbers.length === 0) return;<br /><br />const oddNumbers = filterOddLines(extractedNumbers);<br /><br />const resultText = oddNumbers.join(&#x27;\n&#x27;);<br /><br />downloadTextFile(resultText, `TEXTractor_OddLines_${new Date().toISOString().slice(0,10)}.txt`);<br /><br />// Visual feedback<br /><br />this.innerHTML = &#x27; span /span Downloaded Odd!&#x27;;<br /><br />setTimeout(() = {<br /><br />this.innerHTML = &#x27; span /span Download Odd Lines&#x27;;<br /><br />}, 1500);<br /><br />});<br /><br />// Download Even Lines<br /><br />downloadEvenBtn.addEventListener(&#x27;click&#x27;, function() {<br /><br />if (extractedNumbers.length === 0) return;<br /><br />const evenNumbers = filterEvenLines(extractedNumbers);<br /><br />const resultText = evenNumbers.join(&#x27;\n&#x27;);<br /><br />downloadTextFile(resultText, `TEXTractor_EvenLines_${new Date().toISOString().slice(0,10)}.txt`);<br /><br />// Visual feedback<br /><br />this.innerHTML = &#x27; span /span Downloaded Even!&#x27;;<br /><br />setTimeout(() = {<br /><br />this.innerHTML = &#x27; span /span Download Even Lines&#x27;;<br /><br />}, 1500);<br /><br />});<br /><br />clearBtn.addEventListener(&#x27;click&#x27;, function() {<br /><br />// Clear all without confirmation<br /><br />inputDataTextarea.value = &#x27;&#x27;;<br /><br />resultsTextarea.value = &#x27;&#x27;;<br /><br />extractedNumbers = [];<br /><br />// Reset file upload<br /><br />fileUpload.value = &#x27;&#x27;;<br /><br />fileName.textContent = &#x27;No file chosen&#x27;;<br /><br />// Disable download buttons<br /><br />downloadAllBtn.disabled = true;<br /><br />downloadOddBtn.disabled = true;<br /><br />downloadEvenBtn.disabled = true;<br /><br />// Reset all stats<br /><br />charCountSpan.textContent = &#x27;0&#x27;;<br /><br />lineCountSpan.textContent = &#x27;0&#x27;;<br /><br />numbersCountSpan.textContent = &#x27;0&#x27;;<br /><br />threeDigitCountSpan.textContent = &#x27;0&#x27;;<br /><br />fourDigitCountSpan.textContent = &#x27;0&#x27;;<br /><br />// Visual feedback<br /><br />this.style.backgroundColor = &#x27;#48bb78&#x27;;<br /><br />this.innerHTML = &#x27; span /span Cleared!&#x27;;<br /><br />setTimeout(() = {<br /><br />this.style.backgroundColor = &#x27;&#x27;;<br /><br />this.innerHTML = &#x27; span /span Clear All&#x27;;<br /><br />}, 1000);<br /><br />// Return focus to input<br /><br />inputDataTextarea.focus();<br /><br />});<br /><br />clearInputBtn.addEventListener(&#x27;click&#x27;, function() {<br /><br />// Clear only input without confirmation<br /><br />inputDataTextarea.value = &#x27;&#x27;;<br /><br />// Reset file upload<br /><br />fileUpload.value = &#x27;&#x27;;<br /><br />fileName.textContent = &#x27;No file chosen&#x27;;<br /><br />// Update input stats<br /><br />updateInputStats();<br /><br />// Visual feedback<br /><br />this.style.backgroundColor = &#x27;#48bb78&#x27;;<br /><br />this.innerHTML = &#x27; span /span Input Cleared!&#x27;;<br /><br />setTimeout(() = {<br /><br />this.style.backgroundColor = &#x27;&#x27;;<br /><br />this.innerHTML = &#x27; span /span Clear Input&#x27;;<br /><br />}, 1000);<br /><br />// Return focus to input<br /><br />inputDataTextarea.focus();<br /><br />});<br /><br />// ==================== Scroll to Top Button ====================<br /><br />function toggleScrollTopButton() {<br /><br />if (window.scrollY 300) {<br /><br />scrollTopBtn.classList.add(&#x27;visible&#x27;);<br /><br />} else {<br /><br />scrollTopBtn.classList.remove(&#x27;visible&#x27;);<br /><br />}<br /><br />}<br /><br />scrollTopBtn.addEventListener(&#x27;click&#x27;, function() {<br /><br />window.scrollTo({ top: 0, behavior: &#x27;smooth&#x27; });<br /><br />});<br /><br />window.addEventListener(&#x27;scroll&#x27;, toggleScrollTopButton);<br /><br />toggleScrollTopButton(); // Initial check<br /><br />// ==================== Keyboard Shortcuts ====================<br /><br />document.addEventListener(&#x27;keydown&#x27;, function(event) {<br /><br />// Ctrl/Cmd + Enter to extract<br /><br />if ((event.ctrlKey || event.metaKey) event.key === &#x27;Enter&#x27;) {<br /><br />event.preventDefault();<br /><br />extractBtn.click();<br /><br />}<br /><br />// Ctrl/Cmd + S to save/download all<br /><br />if ((event.ctrlKey || event.metaKey) event.key === &#x27;s&#x27;) {<br /><br />event.preventDefault();<br /><br />if (!downloadAllBtn.disabled) {<br /><br />downloadAllBtn.click();<br /><br />}<br /><br />}<br /><br />});<br /><br />// ==================== Initialize ====================<br /><br />console.log(&#x27;TEXTractor v3 loaded successfully.&#x27;);<br /><br />/script<br /><br />/body<br /><br />/html... &#x5b;&#xa0;<a href="/blogentry/196882">More</a>&#xa0;&#x5d;</p>]]></description>
			<category>Blog Entry</category>
			<category>Il2c</category>
			<wfw:comment>https://www.lotterypost.com/blogentry/196882</wfw:comment>
		</item>
	</channel>
</rss>

