Everything CSV
Viper does.
It is a viewer for files that are too big to open. One pass over the file records where every row begins, and after that the size of what you opened stops being your problem. This is the whole of it, in the order you will need it.
Installing and starting it
Run the installer and start CSV Viper from the Start menu. It opens in its own window — no browser tab, no address bar — and everything it does happens on your machine.
Under that window it is a small local web server talking to itself on
127.0.0.1:8143. That is why the window looks like a web page: it is one, served
to you by you. Nothing is exposed to the network and nothing goes out.
Running from source
If you have the source folder rather than the installer, double-click
run.bat. The first run builds a small Python environment beside it, which
takes a minute; every run after that is immediate.
Opening a file
Three ways, and the first is the one to use:
Browse
Opens a file browser inside the window — your drives, the folders you have opened files from before, and a box you can paste a path into. It lists one folder at a time and never scans a drive, so it stays instant even on an external USB disk.
Paste a path
The box on the start screen takes a full path. Quotes around it are fine — copying a path from Explorer usually adds them, and they are stripped for you.
Recent files
The start screen lists what you opened before, with its size and row count. A file that has since been moved or deleted is greyed out; the × forgets it.
Inside the browser there is also a Windows picker… button, which opens the standard Windows file dialog. It is the second option rather than the first for a reason: the picker is a window opened on behalf of a background program, and Windows does not always agree to put one of those in front of you.
What happens when you open something enormous
The first screenful appears immediately. Behind it, the file is being scanned, and you can watch that in the status bar: rows found climbs and the percentage rises. You can scroll, search the part that is done, and move columns while it runs.
The second time you open that same file it is instant — the index was saved. If the file has changed since (a different size or timestamp), it is scanned again, because an index that points into rows that have moved is worse than no index at all.
What you are looking at
| Part | What it is |
|---|---|
| Tabs | One per open file. Open as many as you like — an index is about a megabyte, so several large files cost almost nothing to keep open. A spinner means that file is still being scanned. |
| Toolbar | How the file is being read: delimiter, text encoding, whether row one is a header, and how quotes are treated. Then find, go to row, and the panels. |
| The gutter | The narrow numbered column on the left. It is the row's real number in the file, which stays true when you filter to search results. |
| The grid | Only ever holds a screenful. Scroll anywhere in the file and the rows are fetched as they are needed. |
| Status bar | File name and size, row count, column count, and the cell you have selected. |
Moving the columns
This is the part you will use most. Vendor files arrive in vendor order, and the column you care about is never the first one.
Drag a header saved per file
Grab any column header and move it
A pink line shows where it will land. Let go and the column moves — and the cells move with it, so you can check you grabbed the right one on the way past.
Resize and fit
The right-hand edge of a header
Drag that edge to resize. Double-click it and the column becomes exactly as wide as the widest thing visible in it — which is usually what you wanted.
The Columns panel
The Columns button, top right
Everything at once, useful when a file has ninety columns and dragging headers would mean scrolling sideways for a minute:
- The tick box shows or hides a column.
- 📌 freezes it to the left edge, where it stays while everything else scrolls past. Good for a phone number or an ID.
- Click the name to rename it. The new name is what an export writes, so a
column called
c_fname_1can go out asfirst_name. - Drag a row in the panel to reorder without touching the grid.
- Show all, Hide all and Reset at the bottom. Reset puts everything back to the file's own order and names.
Finding rows
Type in the Find box and press Enter. The whole file is searched — not the part you have scrolled through — and the grid then shows only the rows that matched, with their real row numbers still in the gutter.
Press Esc, or the clear button beside the hit count, to go back to the whole file.
Two kinds of search
| What you asked for | How it runs | Speed |
|---|---|---|
| Any column — the default | Reads the file as raw bytes and looks for your text anywhere in the row. No parsing at all. | ~250 MB/s |
| One column — chosen in the In dropdown | Splits every row into fields so it can look only at the column you named. | slower, with progress |
Both run in the background with a progress percentage, and both can be left to run while you look at something else. Matching stops at 500,000 rows, which is reported rather than hidden — past that point you are not searching, you are filtering, and an export is the better tool.
Reading one row
Double-click any row — or press the Row button — and it opens in the side panel, one field per line, in your current column order. On a ninety-column record this is the only sane way to read it.
- Click any value to copy it.
- Copy row puts the whole row on the clipboard as CSV, properly quoted.
- Copy as JSON gives you
{"first_name": "…"}with your column names, which is usually what you want when you are pasting into a ticket or a script. - Ctrl+C copies just the selected cell.
Exporting the view
Moving columns around on screen is only half of what moving columns around means. The other half is a file with the columns in that order, which is what Export writes.
Choose where it goes
A path is filled in for you beside the original. Browse… opens the Windows save dialog if you would rather point at somewhere.
Choose the rows
Every row, the search results only (offered when you have a search running), or a range by row number.
The columns are what you can see
In the order shown, under the names you gave them, without the ones you hid. The panel lists them so you can check before it runs.
Two switches
Whether to write a header row, and whether to add a UTF-8 mark so Excel opens accented characters correctly. Turn the second one on if the file is going to someone who will double-click it.
The export reads forward once, one row at a time, so exporting from a 4 GB file costs 4 GB of reading and no memory to speak of. Progress shows in the status bar, and Cancel stops the job rather than just closing the window.
Delimiter, text and headers
Four things are guessed when a file opens, and all four are one control away in the toolbar. The guesses are usually right; when they are not, it is obvious at a glance.
| Control | Use it when | Cost |
|---|---|---|
| Delim | Everything is crammed into one column, or split in odd places. Comma, tab, pipe, semicolon and colon. | instant |
| Text | Accented characters look like Café. Try
Windows-1252, then Latin-1. | instant |
| Header row | Your first row of data is being used as column names, or your headers are showing up as row 1. | instant |
| Quotes | The file's quoting is broken — see below. | re-scans the file |
Whatever you settle on is remembered for that file, and used instead of the guess next time you open it.
Broken quoting
This is the failure that quietly costs you. One quote character with no partner makes everything after it look like a single enormous field, and the row count silently collapses — a nine-million-row file reports two hundred thousand rows, and nothing looks wrong.
CSV Viper catches it two ways during the scan:
- An odd number of quote characters in the whole file. Valid CSV cannot produce that, so it is proof rather than a guess.
- A single row measured in megabytes, which is what a runaway quote looks like from the outside.
Either one puts an amber bar above the grid saying so, with one button:
Read quotes as plain text. That re-reads the file treating " as an
ordinary character, which is almost always the right answer for a file that is already
broken.
UTF-16 from Excel and SQL
SQL Server Management Studio and Excel both export UTF-16 by default, which stores two bytes per character. Opened directly, every other character looks like a blank.
CSV Viper recognises it before opening and offers a single pass that writes a UTF-8 copy beside the original, then opens that. The original file is not touched, not moved and not deleted.
The copy is named after the original with (utf-8) on the end, so
export.csv becomes export (utf-8).csv in the same folder.
The index
Worth two minutes, because everything else follows from it.
A row is a byte offset. One pass over the file records where rows begin, and after that showing row 8,412,006 is one seek and one small read — the same work as showing row 3. That is why file size stops mattering.
Two refinements
Checkpoints, not every row. An offset per row costs eight bytes a row: 80 MB of index for a 10-million-row file. Instead only every Nth offset is kept, with N sized so the forward read from a checkpoint is about 64 KB. The index for 8.46 million rows comes out at 150 KB, and reaching a row is one seek plus a few dozen rows of parsing.
Quote awareness. A newline inside a quoted field is not a row boundary. The scan
tracks whether it is inside quotes, in whole 8 MB blocks rather than character by
character, so correctness costs no speed. Doubled quotes — "" for a literal
quote — add two and so cannot flip the state, which is exactly right.
Where it keeps things
Everything CSV Viper remembers lives in one folder:
%LOCALAPPDATA%\CSVViper\
indexes\ the saved scan for each file
layouts\ your column order, widths, pins and renames
recent.json the recent files list
Nothing is ever written beside your data. Lead files and discovery exports live on network shares and read-only drives, and a viewer that litters sidecar files in the folder you pointed it at is a viewer you uninstall.
An index is keyed by the file's path, size and timestamp, so a file that has been
rewritten simply misses the cache and is scanned again. Deleting the indexes
folder is always safe; the only cost is one re-scan.
What things cost
Measured on one file: 1.2 GB of lead data, 8,459,121 rows, 16 columns, on an NVMe SSD. On an external USB disk the same work is bounded by the disk, not by the program.
| Operation | Cost | Notes |
|---|---|---|
| Index the whole file | 2.6 s | 471 MB/s — reads the file once |
| Open it again later | instant | index reloaded, not rebuilt |
| Any screenful, anywhere | 0.8 ms | one seek |
| Search the whole file | 4.9 s | 248 MB/s, any column |
| First rows on screen | 0.3 s | while the scan is still running |
| Index on disk | 150 KB | for 8.46 million rows |
Common jobs
Pull one vendor's rows out of a master list
- Open the master file.
- Type the vendor's name or batch code in Find and press Enter. If the code could appear in more than one column, pick the right one in the In dropdown.
- The grid now shows only those rows. Check a few.
- Export → Search results only.
Reshape a file for someone else's import template
- Drag the headers into the order their template wants.
- Hide the columns they do not accept.
- Rename the ones whose names have to match theirs.
- Export → Every row, with a header row, and the Excel mark on if a person rather than a system will open it.
Check what is actually in the middle of a huge file
Ctrl+G, type the row number, press Enter. Vendors have been known to change their format halfway through an export, and row 4,000,001 is where you find out.
Make an SSMS export usable
Open it, accept the UTF-16 conversion, and work with the UTF-8 copy it makes. Delete the original once you are happy.
Keyboard
| Keys | What it does |
|---|---|
| Ctrl+F | Jump to the Find box |
| Ctrl+G | Go to a row number |
| Ctrl+C | Copy the selected cell |
| Ctrl+Home / End | First / last row of the file |
| ↑ ↓ ← → | Move the selected cell |
| Home / End | First / last column |
| PgUp / PgDn | A screenful at a time |
| Esc | Clear the search filter, or close a dialog |
| Double-click a row | Open it in the side panel, one field per line |
| Double-click a header edge | Fit that column to its contents |
When something looks wrong
The row count looks far too low
Look for the amber bar above the grid. The file's quoting is broken and everything after a stray quote is being read as one value. Press Read quotes as plain text.
Every field is in one column
Wrong delimiter. Change Delim in the toolbar — it costs nothing and applies immediately.
Accented characters are mangled
Café means the file is not UTF-8. Switch Text to
Windows-1252, which is what Excel on an English Windows machine produces.
My headers are showing as row 1 — or my first row of data is being used as headers
Toggle Header row.
The Windows file picker does not appear
Use the built-in browser instead — it is the Browse button's normal behaviour and cannot fail to show up. Windows does not always allow a program running in the background to put a dialog in front of you, which is exactly why the built-in one is the default.
Indexing is slow
The scan reads the file once, so it runs at whatever the disk gives. On an external USB drive a gigabyte takes as long as that drive takes to hand over a gigabyte, and nothing can make it faster. It only happens once per file.
I edited the file and now the numbers look stale
They will not be. The saved index is keyed to the file's size and timestamp, so an edited file misses the cache and is scanned again automatically.
What it deliberately does not do
Sort
Sorting a multi-gigabyte file honestly means building a second index keyed on a column — a bigger piece of work than the rest of the viewer put together. Pretending otherwise would mean loading the file into memory, which is the thing this program exists to avoid. Search, filter-to-matches and go-to-row cover most of what sorting gets used for.
Edit cells
It is a viewer. The only thing it ever writes is an export you asked for, to a new file. Your original is never opened for writing at all.
Formulas, charts, pivot tables
That is a spreadsheet, and there is a good one already. This is for the files that one refuses to open.