대용량 CSV 파일을 빠르게 열고 부드럽게 탐색하는 Windows 데스크톱 뷰어입니다. 1 GB가 넘는 CSV도 첫 페이지가 즉시 표시되며, 한글 인코딩(EUC-KR / CP949 / UTF-8)을 정확히 처리합니다.
.NET 10 · Windows Forms · 단일 실행 파일(.exe) 배포 지원
- 대용량 즉시 열람 — 파일 전체를 메모리에 적재하지 않고, 바이트 오프셋 인덱스 +
DataGridView가상 모드로 보이는 행만 그때그때 읽습니다. 1 GB 파일도 첫 페이지가 1초 안에 뜹니다. - 백그라운드 인덱싱 + 진행 표시 — 첫 페이지를 보여주면서 나머지를 백그라운드로 인덱싱하고, 하단 상태바에 진행바 + % 를 표시합니다. 완료되면 "준비 완료"와 함께 필터/정렬이 활성화됩니다. 인덱서는 벡터화 바이트 스캔(
SearchValues) 과 읽기·스캔 겹치기(더블 버퍼링) 로 동작해, 일반 NVMe에서 인덱싱 처리량이 ~2 GB/s에 이릅니다. - 한글 인코딩 자동 감지 + 수동 전환 — BOM 확인 → strict UTF-8 검증 → 실패 시 CP949(EUC-KR) 폴백. 상태바 우측의 인코딩 표시(신호등 왼쪽)를 클릭하거나 View ▸ 인코딩 메뉴로 즉시 바꿔 다시 디코딩할 수 있습니다(재인덱싱 불필요).
- 적응형 메모리 — RAM 예산(기본 1.5 GB) 이내면 원본 바이트를 메모리에 보관해 필터/정렬이 빠르고, 초과하면 자동으로 디스크 스캔 모드로 전환해 메모리를 일정하게 유지합니다.
- 검색 / 필터 / 정렬 — 스트리밍 "Find Next", 컬럼별/전체 필터, 컬럼 헤더 클릭 정렬. 헤더 Shift+클릭으로 다중 컬럼 정렬(우선순위 표시)을 지원하며, 같은 값끼리는 원본 순서를 유지하는 안정 정렬입니다.
- 한눈에 보는 상태바 — 좌측에 행 수 · 파일 용량, 우측에 인코딩 위젯과 상태 표시등을 표시합니다.
- 조건 누적 필터(AND) — 텍스트 필터에 더해, 선택한 셀의 값으로 즉시 필터를 거는
Filter by Cell버튼/우클릭 메뉴를 제공합니다. 여러 조건이 AND로 누적되어 Excel처럼 점점 좁혀 볼 수 있습니다. 조건을 추가할 때는 전체가 아니라 현재 결과만 다시 거르므로(증분 필터) 2중·3중으로 갈수록 빨라집니다. - 상태 표시등(신호등) — 상태바 우측 끝의 색 점으로 상태를 한눈에: ⚪ 대기 · 🟡 불러오는 중 · 🟠 작업 중 · 🟢 준비 완료.
- 원본 행번호 — 행 헤더에 원본 파일 기준 행번호를 표시합니다. 필터·정렬해도 원래 위치를 추적할 수 있고, 헤더 폭은 드래그로 조절할 수 있습니다.
- 셀 내 줄바꿈 표시 — 따옴표로 감싼 필드 안의 줄바꿈을 여러 줄로 보여줍니다(대용량에서도 끊김 없이 셀 선택).
- 선택 항목 보기 — 그리드 위 셀 값 표시줄(높이 확장 가능)과, 토글 가능한 우측 상세 패널(선택한 행의 모든 컬럼을 컬럼명+값으로 표시, F4). 한 셀에 여러 줄이 담긴 데이터를 읽기에 좋습니다.
- 다국어(영어·한국어) — 기본은 영어이며, Windows 표시 언어가 한국어이면 자동으로 한국어로 시작합니다. View ▸ Language에서 즉시 전환할 수 있고, 선택은 저장됩니다.
- 라이트/다크 테마 — 툴바 우측의 토글 버튼으로 전환합니다. 첫 실행 시 Windows 시스템 테마를 따르고, 변경한 테마는 저장되어 다음 실행에 복원됩니다.
- 사용법 도움말 — Help ▸ How to Use(F1)에서 주요 기능과 단축키를 한 화면에서 안내합니다.
- 전용 앱 아이콘 — 작업표시줄·창 제목·설치 관리자·제거 항목에 일관된 아이콘이 적용됩니다.
- '데이터 품질' 메뉴 신설 — 품질 프로파일 실행(Ctrl+Shift+Q)이 파일 전체를 병렬로 1패스 스캔해(현재 뷰의 200만 행 상한과 무관, 1 GB·1,470만 행을 약 4.3초에) 완전성·적합성·타당성 문제를 한 번에 찾습니다: 결측률(빈값·공백·
NA류 구분)·위장결측 후보(99·999·-9·"NA"·1900-01-01등 sentinel)·타입 부합·코드북 대조(SPSS 값 라벨·SAS.sas7bcat카탈로그의 허용 코드 밖 값)·상수/빈 컬럼·IQR 이상치·미래 날짜·완전 중복 행·필드 수 불일치. - 발견 → 필터 → 수정 루프 — 하단 검사 결과 패널이 발견을 심각도별(심각/경고/정보)로 나열하고, 항목을 클릭하면 위반 행만 남기는 필터 칩으로 변환되며 원본 행번호로 점프합니다. 0~100 점수 게이지 대신 심각도별 건수로 정직하게 보여주고, 검사 범위(전수/부분/생략)를 항상 표기합니다.
- 키 유일성 · 타당성 규칙 — 사용자 지정 (복합)키 중복을 파일 전체에서 검사하고, "0건이어야 하는 위반식" 규칙(
age < 0 OR age > 120,[end_date] < [start_date]같은 컬럼 간 비교 포함)을 정의·실행하며 JSON 규칙 세트로 저장·공유합니다. - 품질 보고서 내보내기 — 발견·컬럼 프로파일·파일 지문(이름·크기·검사 시각·버전)을 HTML / Markdown / JSON으로 출력합니다(JSON은 후속 버전 비교용 안정 스키마 스냅샷).
- 기능 범위는 4개 AI 모델(Fable 5·Codex·Grok·Opus 4.8)의 2라운드 설계 논쟁으로 확정했습니다(점수 게이지·내장 의료 규칙 팩·자동 수정을 만장일치로 배제 — "뷰어는 심판이 아니라 현미경"). 5앵글 멀티에이전트 코드 리뷰로 18건을 수정했고, 계산 엔진은 합성 데이터 xUnit 테스트로 검증합니다(총 360개 통과).
- '시각화' 메뉴 신설 — 차트 빌더(모델리스·다중 창, 차트 종류 전환 1클릭)와 분포/관계/범주/시계열 프리셋으로 진입합니다. 차트는 현재 필터·정렬된 뷰를 그대로 사용합니다.
- 차트 7종 + 통계 배지 — 히스토그램(KDE 밀도곡선·정규곡선 + Shapiro-Wilk 배지), 박스플롯(그룹별 + ANOVA F/p/η² 또는 Welch t 배지), 산점도(OLS 회귀선 + r/p 배지), 상관 히트맵(비유의 셀 흐림, 셀 클릭 → 산점도 드릴다운), Q-Q 플롯, 시계열(이동평균), 파레토(누적%). 배지를 클릭하면 검정 전체 결과를 보여줍니다.
- 대용량 정직 렌더 — 통계는 항상 전수(뷰 상한 2백만 행)로 계산하고 렌더링만 축약합니다: 산점도 5만 점 초과 시 밀도 격자(전수 카운트·로그 명도) 자동 전환, Q-Q는 1만 점 초과 시 결정적 분위 시닝. 렌더 노트에 통계 N과 렌더 모드를 항상 표기합니다.
- 상호작용 — 호버 툴팁, 드래그/휠 줌 + 더블클릭 초기화(수치축 차트), PNG 저장·클립보드 복사(2×), "현재 뷰로 새로고침".
- 통계 → 차트 역방향 진입 — 분석 결과창(기술통계·수치분포·빈도·상관·t검정·ANOVA·정규성)에 "차트로 보기" 버튼이 붙어 해당 차트가 컬럼이 채워진 채 열립니다.
- 설계는 3개 AI 모델(Fable 5·Codex·Grok)의 2라운드 설계 논쟁으로 확정했고, 8앵글 코드 리뷰(딥 줌 크래시·파서 정합성·렌더 캐시 등 14건 수정)를 거쳤습니다. 계산 엔진(회귀·KDE·Q-Q·박스·상관행렬)은 scipy 참조값 대조 테스트로 검증합니다(총 316개 통과).
- 통계 분석의 수치 파싱이 통화·퍼센트 접사를 인식하도록 통일되어(
₩1,000·25%), 결과창과 차트가 항상 같은 데이터를 봅니다.
- 기본통계 대폭 확장 — 분석 메뉴에 기술통계(N·결측·평균·표준편차·표준오차·95% 신뢰구간·사분위·범위·IQR·최빈값·왜도/첨도·변동계수, 다중 컬럼 일괄), 빈도분석(빈도·백분율·누적%), 일원배치 분산분석(ANOVA)(F·자유도·p·효과크기 η²), 정규성 검정(Shapiro-Wilk) 을 추가했습니다. 통계량·p값은
scipy와 대조해 검증했습니다(기존 상관·t검정·카이제곱에 더해). - 컬럼 타입 수동 변경 — 컬럼 헤더 우클릭 ▸ 타입 변경으로 자동 추론을 덮어씁니다. 데이터 무결성을 위해 전환을 허용 / 표본 검증 후 허용 / 차단으로 분류하고(예:
Float→Integer처럼 손실 가능한 변환은 차단,문자→날짜는 표본을 검증해 실패 예시와 함께 확인), 언제든 자동 감지로 되돌릴 수 있습니다. 타입을 바꾸면 그 컬럼의 필터·통계·표시가 새 타입으로 재계산됩니다. - SQLite(.db/.sqlite/.sqlite3) 열기 — 데이터베이스의 테이블·뷰를 하단 시트 탭으로 열어 CSV처럼 필터·정렬·분석·내보내기를 그대로 씁니다. 원본은 읽기 전용으로만 접근합니다(Microsoft.Data.Sqlite).
- SAS 값 라벨(.sas7bcat) 지원 — 필드 라벨 표시를 켜면
.sas7bdat옆의 동반 포맷 카탈로그(<파일명>.sas7bcat또는formats.sas7bcat)를 자동으로 찾아 코드를 라벨로 치환합니다(예:1→Male). 카탈로그 판독은 ReadStat(MIT)의 구현을 순수 관리형 C#으로 포팅해 네이티브 의존성 없이 동작하며, 한국어(CP949·EUC-KR) 인코딩도 처리합니다. (v1.12.1까지 미지원이던 기능입니다. 다만 SAS 카탈로그 포맷 특성상 일부 파일은 판독되지 않을 수 있으며, 그럴 땐 코드값을 그대로 표시합니다.)
- SAS 숫자 컬럼도 선언 타입 존중 — 무포맷/일반 숫자 포맷은
Integer/Float로 확정해(예:seq같은 헤더의 Identifier 오인 방지) SPSS와 동일하게 동작합니다. 날짜 포맷(YYMMDDS등)은 그대로 날짜로 인식합니다. 실제 임상.sas7bdat로 검증했습니다. - (SAS 값 라벨은 외부
.sas7bcat카탈로그에 있고 순수 관리형 .NET 리더가 없어 지원하지 않습니다 — 문자 컬럼은 저장된 텍스트를 그대로 표시.)
- 선언된 변수 타입을 자동 매칭 — SPSS·SAS 파일에 지정된 컬럼 타입(통화·퍼센트·날짜·범주·순서형)을 추론 대신 파일 명시대로 표시합니다. 예: 값 라벨이 붙은 코드 컬럼은 범주형,
DOLLAR/PCT포맷은 통화/퍼센트로 인식하고, 숫자로 선언된id는 Identifier로 오인하지 않습니다. - 타입 4종 추가 —
Currency·Percent·Ordinal·Scientific. 통화는 ₩ $ ¥/元 €/£ 기호를 인식하며, 통화·퍼센트 열은 그리드에 기호(₩1,000·25%)를 함께 표시합니다(정렬·통계·필터는 밑값 숫자로 동작). - CSV에서도
₩1,000·25%·1.2e3같은 값을 통화·퍼센트·지수로 자동 추론합니다.
- 필드 라벨 표시 전환 툴바 버튼 추가 — 타입 배지 버튼 왼쪽에 위치하며 보기 메뉴 토글과 동기화됩니다. SPSS·SAS일 때만 활성(그 외 파일에선 회색). 배지 버튼과 구별되는 초록 태그 아이콘.
- 필드 라벨 토글 — 보기 ▸ 필드 라벨 표시로 SPSS·SAS 파일의 변수 라벨을 헤더로, SPSS는 값 라벨로 코드를 치환(예:
1→남)해 봅니다. 끄면 원값·변수명으로 돌아갑니다(기본값). 선택은 저장되어 다음 열기의 기본값이 됩니다. - SAS는 파일에 값 라벨이 없어(포맷 카탈로그는 별도) 변수 라벨(헤더)만 적용됩니다. SPSS 날짜 변수는 원값 모드에서도 날짜로 표시됩니다.
- (R
.rds/.RData는 순수 관리형 리더가 없어 별도 검토 예정입니다.)
- SPSS 데이터 파일(.sav) 지원 — 파일을 열면 데이터셋을 자동으로 읽어 CSV처럼 필터·정렬·타입 배지·패싯·내보내기를 그대로 사용합니다. 엑셀·SAS와 동일하게 임시 CSV로 변환해 기존 엔진에 얹으며, Curiosity.SPSS(MIT, 순수 관리형)를 사용합니다.
- 현재는 원값(코드) 을 표시해 타입 추론을 보존합니다. Value Label 펼치기·Variable Label 노출·날짜 변수 디코딩은 후속(Phase 2)으로 계획되어 있습니다.
- 사용법(F1)·정보 창 내용을 최신 기능(엑셀·SAS·SPSS 열기, 타입 인식 필터, 칩 바, 패싯 패널)으로 갱신.
- 정보 창에 버전·릴리즈 날짜를 자동 표시 —
release.ps1이 빌드 시 버전과 날짜를 어셈블리 메타데이터에 함께 주입(-p:Version·-p:ReleaseDate)하고, 정보 창은AppInfo로 이를 읽습니다. 표시되는 정보가 실제 릴리즈한 버전/날짜와 항상 일치하며 수동 편집이 필요 없습니다.
- 엑셀(.xlsx/.xls)·SAS(.sas7bdat) 지원 — 파일을 열면 시트/데이터셋을 자동으로 읽어 들이고, 멀티시트 워크북은 하단 시트 탭으로 전환합니다. 열린 뒤에는 CSV와 동일하게 필터·정렬·타입 배지·패싯·내보내기를 모두 사용할 수 있습니다.
- 내부적으로 각 시트를 임시 CSV로 변환해 기존 엔진에 얹는 방식이며, 엑셀은 ExcelDataReader, SAS는 SasReader(EPAM parso 포팅)를 사용합니다. (대용량 바이트 오프셋 즉시열람은 여전히 CSV/TXT 전용입니다.)
- 활성 필터 칩 바를 툴바 아래 별도 띠로 도킹해, 칩이 그리드 컬럼 헤더를 덮던 문제를 해결.
- 칩 높이가 비정상적으로 커지던 레이아웃 버그 수정(고정 크기 렌더링).
- 칩 바 배경을 앱 기본 테마색으로 맞추고, 모두(AND)/하나라도(OR) 토글 높이를 칩과 일치.
- 컬럼 타입 확장 — 기존
INT/FLT/DATE/BOOL/CAT/STR에 더해 **DateTime·Time·Identifier**를 자동 추론합니다.2024-01-01 14:30은 DateTime,14:30:00은 Time으로 구분하고,yyyyMMdd컴팩트 날짜는 헤더와 무관하게 날짜로 인식합니다(연도 1900~2100 가드). 식별자(선행 0 숫자·id/번호/코드헤더)는 수량이 아니므로 평균 등 무의미한 수치 통계를 자동 억제합니다. - 전 타입 헤더 필터 —
Empty를 제외한 모든 컬럼에 타입별 필터를 제공합니다: 숫자·시간계열은 범위(min~max, 시각 정밀도 인식), 범주·불리언은 체크박스, 문자열·식별자는 텍스트 술어(포함·일치·시작·끝·정규식·빈값·목록 붙여넣기). 고유값이 적은 숫자 컬럼은 범위 대신 체크박스로 폴백합니다. - 활성 필터 칩 바 — 모든 활성 조건을 그리드 위 칩으로 표시하고, 각 칩의 ✕로 개별 제거·클릭으로 재편집합니다. 조건이 둘 이상이면 모두(AND)/하나라도(OR) 결합 토글을 제공하며, 결합 방식은 저장된 뷰에 함께 저장됩니다. 중첩 부울
(A AND B) OR C는 고급 식 필터로 표현할 수 있습니다. - 패싯 분석 패널(F6) — 우측 패널에서 컬럼별 분포를 한눈에: 숫자는 히스토그램, 그 외는 상위 값 빈도를 가로 막대로 표시합니다. 막대를 클릭하면 그 구간/값으로 즉시 필터되고, 필터가 바뀌면 분포가 다시 계산됩니다(크로스필터링).
- 고급 검색 — 평문(contains)에 더해 정규식(
/패턴/또는regex:)과 퍼지(fuzzy:) 검색을 지원합니다. - 표현식 필터 —
age > 30 AND city = "서울"처럼AND/OR/괄호와 비교 연산을 쓰는 고급 필터(Edit ▸ Advanced Filter). - 헤더 타입 배지 — 인덱싱이 끝나면 컬럼명 옆에 추론 타입(
INT/FLT/DATE/BOOL/CAT/STR)을 컬러 배지로 표시(보기 메뉴·툴바에서 켜고 끄기). - 헤더 필터 — 범주형/날짜 컬럼 헤더 우측의 깔때기로 값 체크박스(검색·개수)·날짜 범위 필터를 적용합니다(정렬과 분리).
- 내보내기 — 현재 보기(필터·정렬·표시 컬럼)를 CSV / Markdown / JSON / HTML로 스트리밍 내보내기.
- 분석 — 수치 분포(분위·히스토그램), 날짜 히스토그램(일/주/월/년), 중복 탐지, 그룹별 집계(Count/Sum/Mean/… ).
- 통계 — 상관(Pearson/Spearman), 독립·대응 t검정, 카이제곱 검정(정확한 p값·신뢰구간).
- 피벗 빌더 + 차트 — 행/열/값/필터에 필드를 배정하는 엑셀식 피벗(다중 측정·날짜 그룹핑·합계)과 외부 라이브러리 없는 GDI+ 차트(막대/묶은막대/누적/꺾은선). 피벗 메뉴에서 표/차트로 진입.
- 엑셀식 셀 선택·복사 — 드래그 사각 선택·
Shift/Ctrl선택,Ctrl+C로 전체 값 TSV 복사, 우클릭으로 행/열 전체 복사, 상세 패널 TEXT/JSON 복사. - 저장된 뷰 — 필터·정렬·숨김 컬럼·검색·컬럼 필터를 파일별로 저장/복원.
- 가져오기 편의 — 클립보드(CSV 텍스트·경로·
file://)·드래그앤드롭으로 바로 열기. - 성능 대시보드 · 영속 인덱스 캐시 — 처리량·저장 모드 등을 한눈에, 디스크 모드 재열기 시 인덱싱 생략.
- 행으로 이동(Ctrl+G) · 컬럼 숨기기 — 원본 행번호로 점프, 컬럼 표시/숨김 체크리스트.
| 항목 | 내용 |
|---|---|
| 런타임 | .NET 10 (net10.0-windows) |
| UI | Windows Forms |
| CSV 엔진 | 외부 라이브러리 없이 직접 구현(SIMD 바이트 스캐너 + span 파서) |
| 인코딩 | CodePagesEncodingProvider로 CP949/EUC-KR(코드페이지 949) 지원 |
요구 사항: .NET 10 SDK
# 빌드
dotnet build -c Release
# 실행
dotnet run --project NanumCsvViewer -c Release
# 테스트(CSV 파서·인덱서·인코딩 감지 등 단위/통합 테스트)
dotnet test릴리즈는 Portable과 Install 두 가지로 배포합니다(둘 다 프레임워크 의존 — 앱에 .NET 미포함).
| 산출물 | 형태 | 요구사항 |
|---|---|---|
| Portable | …-portable.exe — 설치 없이 실행하는 단일 exe |
.NET 10 Desktop Runtime (x64) (없으면 Windows가 안내) |
| Install | …-setup.exe — 시작 메뉴 등록·제거 지원 설치 관리자 |
설치 중 .NET 10을 점검해 없으면 자동 설치 |
앱 빌드는 win-x64-framework 게시 프로필을 사용하고, 설치 관리자는 installer/NanumCsvViewer.iss(Inno Setup)로 만듭니다.
(.NET을 포함한 자체 포함본이 필요하면 win-x64-singlefile 프로필로 별도 게시할 수 있습니다.)
scripts/release.ps1이 게시 → 앱 exe 서명 → Portable 복사 → 설치 관리자 컴파일 → setup 서명 → 설치된 exe 서명 검증(임시 무인 설치·제거) → GitHub 릴리즈까지 수행합니다.
- 기본적으로 x64·arm64 두 아키텍처를 모두 빌드·서명하고 한 릴리즈에 함께 업로드합니다. 한쪽만 만들려면
-Arch x64또는-Arch arm64. - Portable·setup·설치되는 앱 exe 모두 SafeNet 토큰의 EV 인증서로 서명·타임스탬프됩니다. (페이로드를 먼저 서명한 뒤 패키징하므로, Inno Setup이 바이트 보존하여 설치된 exe의 서명이 유지됩니다.)
-p:Version으로 바이너리 파일버전을 릴리즈 버전과 자동 일치시킵니다.- 서명 시 토큰 PIN 프롬프트가 뜹니다(연속 서명은 SafeNet single-logon 권장). 동일 버전 재실행 시 기존 릴리즈에 자산을 덮어씁니다.
# 토큰 연결 상태에서 실행(코드사이닝 인증서 자동 선택)
.\scripts\release.ps1 -Version 1.14.0
# 빌드/컴파일만(서명·검증·릴리즈 생략)
.\scripts\release.ps1 -Version 1.14.0 -SkipSign -SkipRelease요구: .NET SDK, Inno Setup 6.3+ (winget install JRSoftware.InnoSetup), Windows SDK(signtool), SafeNet Authentication Client, GitHub CLI(gh auth login).
- File ▸ Open(또는 툴바 Open)으로
.csv/.txt파일을 엽니다. - 하단 진행바가 끝나면(또는 진행 중에도) 자유롭게 스크롤합니다.
- 인코딩: 상태바 우측(신호등 왼쪽)의 인코딩 표시를 클릭해 바꿉니다(자동 감지가 틀린 경우). View ▸ 인코딩 메뉴로도 가능합니다.
- Find: 검색어 입력 후 Enter → 다음 일치로 이동.
- Filter: 컬럼 선택 + 검색어 → Apply. 셀을 선택한 뒤
Filter by Cell(또는 우클릭 ▸ "이 셀 값으로 필터")로 그 값 조건을 추가하면 기존 필터에 AND로 누적됩니다. Clear로 전체 해제. - 정렬: 컬럼 헤더 클릭(다시 클릭 시 내림차순).
- 상세 패널: 기본으로 우측에 표시되며, 툴바
Detail Panel버튼 또는 F4로 켜고 끌 수 있습니다(폭 드래그 확장). 선택한 행 전체를 컬럼명+값으로 보여줍니다. - 상태 표시등: 상태바 우측 끝 색 점으로 진행/준비 상태를 확인합니다(🟢 준비 완료).
| 단축키 | 기능 |
|---|---|
Ctrl+O |
파일 열기 |
Ctrl+Q |
종료 |
Ctrl+F |
검색창으로 포커스 이동 |
F3 / Enter(검색창) |
다음 찾기 |
Enter(필터창) |
필터 적용 |
Ctrl+B |
선택한 셀 값으로 필터(AND 누적) |
Ctrl+G |
행으로 이동(원본 행번호) |
Ctrl+C |
선택한 셀 전체 복사(TSV) |
Ctrl+Shift+L |
필터 해제 |
Ctrl+Shift+S |
정렬 해제 |
F4 |
상세 패널 토글 |
F1 |
사용법 도움말 |
모든 기능은 메뉴(File · Edit · View · Help) 와 툴바 양쪽에서 접근할 수 있습니다.
- 단일 컬럼: 컬럼 헤더 클릭(다시 클릭 시 오름↔내림 토글), 또는
Sort ▲ / ▼툴바 버튼·Edit 메뉴(현재 셀의 열 기준). - 다중 컬럼: 헤더를 Shift+클릭하면 정렬 차수가 누적됩니다(1차, 2차, 3차…). 예:
이름클릭 후나이Shift+클릭 → 이름 오름차순, 동률이면 나이로 정렬. 활성 컬럼에는 정렬 화살표가, 다중일 때는 우선순위 번호가 헤더에 표시됩니다. - 같은 키 값을 가진 행끼리는 원본 파일 순서가 유지됩니다(안정 정렬). 숫자처럼 보이는 컬럼은 수치 기준으로 정렬합니다.
- 필터 조건을 바꾸면 정렬이 초기화됩니다(필터를 더 좁히는 경우는 순서 유지).
핵심은 "전부 읽지 않는다"입니다.
- 파일을 한 번 순차 스캔하며 각 레코드의 시작 바이트 오프셋만 인덱싱합니다.
- 화면에 보이는 행만 오프셋으로 찾아 읽고, 선택된 인코딩으로 디코딩·파싱해 LRU 캐시에 둡니다.
- EUC-KR/CP949/UTF-8에서는 줄바꿈·구분자·따옴표 바이트가 멀티바이트 문자 중간에 나타나지 않으므로, 바이트 단위 스캔이 인코딩과 무관하게 안전합니다(따옴표 안 줄바꿈도 정확히 처리).
- 엑셀(
.xlsx/.xls)·SAS(.sas7bdat)·SPSS(.sav)·SQLite(.db/.sqlite/.sqlite3)는 열 때 시트/데이터셋/테이블별 CSV로 변환해 지원합니다(시트 탭으로 전환). 단, 바이트 오프셋 대용량 즉시열람은 CSV/TXT 전용입니다. - UTF-16/UTF-32는 대용량 모드에서 지원하지 않습니다(BOM 감지 시 안내).
- 매우 느린 HDD에서 디스크 모드(>약 1.5 GB)일 때 스크롤에 미세한 지연이 있을 수 있습니다.
개인 프로젝트입니다. 별도 라이선스 명시 전까지 모든 권리는 작성자에게 있습니다.