Windows10 스티커 메모를 키워드로 검색하는 하나시

소개



Windwos10 스티커 메모 앱 (Microsoft Sticky Notes)의 데이터는 sqlite로 관리되는 것 같습니다!
잘하면 스티커 메모의 키워드 검색을 할 수 있습니다.

데이터 위치



%USERPROFILE%\AppData\Local\packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite

데이터 내용



테이블 자체는 여러 개 있고, 스티커 메모의 데이터는 Note라는 테이블로 관리되는 모양

Note 구조



1 스티커 메모, 1 레코드로 구성된 패턴


열 이름
금형
PK
Not Null
비고


텍스트
varchar

스티커 메모 내용

WindowPosition
varchar

어쩌면 스티커 메모의 위치, Bese64 같기 때문에 인코딩됩니다

IsOpen
integer

표시: 0, 숨기기: 1

IsAlwaysOnTop
integer

0이 설정, 항상 맨 앞에 표시하는 설정이 있었나요?

CreationNoteIdAnchor
varchar

NULL 설정

Theme
varchar

스티커 메모의 색상 설정 (예 : 노란색 스티커 메모 = Yellow)

IsFutureNote
integer

0이 설정

RemoteId
varchar

NULL 설정

ChangeKey
varchar

NULL 설정

LastServerVersion
varchar

NULL 설정

RemoteSchemaVersion
integer

NULL 설정

IsRemoteDataInvalid
integer

NULL 설정

PendingInsightsScan
integer

NULL 설정

유형
varchar

NULL 설정

Id
varchar


UUID 설정

ParentId
varchar

UUID 설정

CreatedAt
bigint

수치 18자리가 설정

DeletedAt
bigint

NULL 설정

UpdatedAt
bigint

수치 18자리가 설정


일부 항목은 클라우드 저장 시 설정될 수 있습니다.
(시험하지 않음)

Text 정보



예를 들어, 이런 느낌의 스티커 메모가 있다고


스티커 메모 내용 (샘플)
html {
    height  : 100%;
    overflow: hidden;
}
body {
    height  : 100%;
    overflow: auto;
}

Text 내용 (샘플)
\id=0276d7d9-39d3-41bd-908b-f22a2f766d4f html {
\id=b504d61d-e1e9-40d0-9d0b-5a55bbaa84e7     height  : 100%;
\id=add3d3ca-494b-4dd5-904a-c1e59926a24e     overflow: hidden;
\id=30e210c6-2762-4db9-a699-c6fe3ed3fe12 }
\id=825775bd-b9a5-42d3-b010-6c1cf1bb8f78 body {
\id=ef22f95b-fd9d-463d-9b56-355e9cf03215     height  : 100%;
\id=b47ac60c-1f5e-4ebc-bdf3-2876e37bf032     overflow: auto;
\id=57921bf5-dd95-4ded-b7ad-613341f3e800 }

개행 코드는 LF
각 행마다 선두에 ID(UUID)가 부여되고 있습니다만 용도는 불명

덧붙여서 스티커 메모의 내용은, 문자 수식이나 화상의 삽입도 할 수 있지만
그렇다면 Text가 어떻게 될지 알 수 없습니다.

키워드 검색을 위한 SQL



스티커 메모 키워드 검색
WITH RECURSIVE SplitTextIntoLines(id,Lno,RetrievedText,RemainingText) AS
(
  SELECT
    Id,
    1 Lno,
    substr(Text, 1, INSTR(Text, CHAR(10)) - 1) RetrievedText,
    substr(Text, INSTR(Text, CHAR(10)) + 1) || CHAR(10) RemainingText
  FROM Note
  UNION ALL
  SELECT
    Id,
    Lno + 1,
    SUBSTR(RemainingText, 1, INSTR(RemainingText, CHAR(10)) - 1) RetrievedText,
    SUBSTR(RemainingText, INSTR(RemainingText, CHAR(10)) + 1) RemainingText
  FROM SplitTextIntoLines
  WHERE RemainingText != '' 
)
, NoteForSearch AS
(
  SELECT
    SplitTextIntoLines.Id,
    SplitTextIntoLines.Lno,
    Note.IsOpen,
    Note.Theme,
    SUBSTR(SplitTextIntoLines.RetrievedText, 42) LineText
  FROM SplitTextIntoLines
  INNER JOIN Note
    ON SplitTextIntoLines.Id = Note.Id
)
SELECT 
  Id,
  IsOpen,
  Theme,
  Lno,
  LineText
FROM NoteForSearch
WHERE LineText LIKE '%[検索ワード]%'
ORDER BY
  Id,
  Lno
;

재기 호출로 Text내의 개행으로 분할해, 행 단위가 되도록(듯이) 하고 있다
각 행의 선두의 ID도 불필요하므로 뱃사리 컷

사용할 때 [검색 키워드]를 원하는 키워드로 바꾸고 사용하십시오.

실행



SQLite 명령 줄 도구로 데이터 열기



sqlite3.exe에서 plum.sqlite에서 열기
>sqlite3.exe %USERPROFILE%\AppData\Local\packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite

SQL 입력



SQL 입력
sqlite> WITH RECURSIVE SplitTextIntoLines(id,Lno,RetrievedText,RemainingText) AS
   ...> (
   ...>   SELECT
   ...>     Id,
   ...>     1 Lno,
   ...>     substr(Text, 1, INSTR(Text, CHAR(10)) - 1) RetrievedText,
   ...>     substr(Text, INSTR(Text, CHAR(10)) + 1) || CHAR(10) RemainingText
   ...>   FROM Note
   ...>   UNION ALL
   ...>   SELECT
   ...>     Id,
   ...>     Lno + 1,
   ...>     SUBSTR(RemainingText, 1, INSTR(RemainingText, CHAR(10)) - 1) RetrievedText,
   ...>     SUBSTR(RemainingText, INSTR(RemainingText, CHAR(10)) + 1) RemainingText
   ...>   FROM SplitTextIntoLines
   ...>   WHERE RemainingText != ''
   ...> )
   ...> , NoteForSearch AS
   ...> (
   ...>   SELECT
   ...>     SplitTextIntoLines.Id,
   ...>     SplitTextIntoLines.Lno,
   ...> Note.IsOpen,
   ...> Note.Theme,
   ...>     SUBSTR(SplitTextIntoLines.RetrievedText, 42) LineText
   ...>   FROM SplitTextIntoLines
   ...>   INNER JOIN Note
   ...>     ON SplitTextIntoLines.Id = Note.Id
   ...> )
   ...> SELECT
   ...>   Id,
   ...>   IsOpen,
   ...>   Theme,
   ...>   Lno,
   ...>   LineText
   ...> FROM NoteForSearch
   ...> WHERE LineText LIKE '%html {%'
   ...> ORDER BY
   ...>   Id,
   ...>   Lno
   ...> ;

SQL 실행



SQL 실행
cb3430ac-922c-4089-b60d-0b99a8f0e75c|1|Yellow|11|html {

열린 노란색 스티커 메모 11 행에있는 것 같습니다.

확인



스티커 메모 목록의 검색 기능으로 검색


SQL은 올바른 결과를 얻을 수 있었던 패턴
단, 검증 부족이므로 스티커 메모의 데이터에 따라서는 정상적으로 움직이지 않을 가능성이 있습니다!

요약



알 수없는 부분이 너무 많지만 키워드 검색은 가능했습니다.
했어!

좋은 웹페이지 즐겨찾기