質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

887閲覧

単語抽出を行う際のエラーが分からない

syen2501

総合スコア38

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2019/04/01 09:20

jsonファイルを読み込み、特定の単語を抽出しようと考えているのですが、
related_startPosにエラーが起こってしまいます。
エラー文は以下の通りです。
※このプログラムはjsonファイルを読み込み、文ごとにその「=>」の左右の語があるか検索し
あればそれぞれ特定の色でハイライトするというものです。

イメージ説明

typescript

1'use strict'; 2import * as vscode from 'vscode'; 3import * as fs from 'fs'; 4 5 6export function activate(context: vscode.ExtensionContext) { 7 console.log('Congratulations, your extension "semieditor" is now active!'); 8 const readsemiJson = JSON.parse(fs.readFileSync('D:\specification\src\sample.json','utf8')); 9 10 11 context.subscriptions.push(vscode.commands.registerCommand('extension.color', () => { 12 vscode.window.showInformationMessage("Color Range Word"); 13 // 特定の単語に色付け 14 const timeWordList = readsemiJson.時間; 15 const strengthTimeWordList = readsemiJson.強時間; 16 const futurePhraseWordList = readsemiJson.未来句; 17 const quantityWordList = readsemiJson.数量; 18 const numberOfHoursWordList = readsemiJson.時数ノ; 19 const strengthQuantityQualifiedWordList = readsemiJson.強数量修飾; 20 const numberOfTimeWordList = readsemiJson.回数; 21 22 const timeWords: vscode.DecorationOptions[] = []; 23 const strengthTimeWords: vscode.DecorationOptions[] = []; 24 const futurePhraseWords: vscode.DecorationOptions[] = []; 25 const quantityWords: vscode.DecorationOptions[] = []; 26 const numberOfHoursWords: vscode.DecorationOptions[] = []; 27 const strengthQuantityQualifiedWords: vscode.DecorationOptions[] = []; 28 const numberOfTimeWords: vscode.DecorationOptions[] = []; 29 const dependencyRelationWords: vscode.DecorationOptions[] = []; 30 31 var timeCount = 0; 32 var strengthtimeCount = 0; 33 var futurephraseCount = 0; 34 var quantityCount = 0; 35 var numberofhoursCount = 0; 36 var strengthquantityqualifiedCount = 0; 37 var numberoftimeCount = 0; 38 39 //child -> parent(値域) semiについて 40 function fromObjecttoRange(WordList: any,foundWordList: vscode.DecorationOptions[],dependencyRelationList: vscode.DecorationOptions[],Count: number){ 41 const activeEditor = vscode.window.activeTextEditor; 42 const text = activeEditor.document.getText(); //ドキュメント取得 43 44 if (WordList.length > 0) { 45 var rangelist = []; 46 var parentlist = []; 47 for (let i = 0; i < WordList.length; i++){ 48 let word = WordList[i].split('=>'); 49 if (word[0] === 'なし'){ 50 rangelist.push(word[1]); 51 } 52 else{ 53 parentlist.push(word[0]); 54 rangelist.push(word[1]); 55 } 56 } 57 let rangewordreg = rangelist[0]; 58 for(let i = 1; i < rangelist.length; i++){ 59 let range = rangelist[i]; 60 rangewordreg = rangewordreg + '|' + range; 61 } 62 63 const rangewordString = rangewordreg; 64 const regrangeWord = eval("/(" + rangewordString + ")/g;"); 65 66 let match; 67 68 69 //値域、状態値を表現する語を抽出 70 while(match = regrangeWord.exec(text)){ 71 const startPos = activeEditor.document.positionAt(match.index); 72 const endPos = activeEditor.document.positionAt(match.index + match[0].length); 73 const decoration = { range: new vscode.Range(startPos, endPos) }; 74 foundWordList.push(decoration); 75 Count++; 76 77 if(startPos !== null){ 78 // 値域、状態値に係る語を抽出 79 for(let i = 0; i < parentlist.length; i++){ 80 const related_startPos = text.lastIndexOf(parentlist[i],match.index); 81 const related_endPos = text.lastIndexOf(parentlist[i],match.index + match[0].length); 82 const related_decoration = {range: new vscode.Range(related_startPos, related_endPos)}; 83 dependencyRelationWords.push(related_decoration); 84 Count++; 85 } 86 } 87 } 88 } 89 } 90 91 function decorateWord() { 92 const activeEditor = vscode.window.activeTextEditor; 93 // const text = activeEditor.document.getText(); //ドキュメント取得 94 95 //時間 96 fromObjecttoRange(timeWordList,timeWords,dependencyRelationWords,timeCount); 97 //強時間 98 fromObjecttoRange(strengthTimeWordList,strengthTimeWords,dependencyRelationWords,strengthtimeCount); 99 //未来句 100 fromObjecttoRange(futurePhraseWordList,futurePhraseWords,dependencyRelationWords,futurephraseCount); 101 // 数量 102 fromObjecttoRange(quantityWordList,quantityWords,dependencyRelationWords,quantityCount); 103 //時数ノ 104 fromObjecttoRange(numberOfHoursWordList,numberOfHoursWords,dependencyRelationWords,numberofhoursCount); 105 //強数量修飾 106 fromObjecttoRange(strengthQuantityQualifiedWordList,strengthQuantityQualifiedWords,dependencyRelationWords,strengthquantityqualifiedCount); 107 //回数 108 fromObjecttoRange(numberOfTimeWordList,numberOfTimeWords,dependencyRelationWords,numberoftimeCount); 109 110 activeEditor.setDecorations(timeMarkerDecoration,timeWords); 111 activeEditor.setDecorations(strengthTimeMarkerDecoration,strengthTimeWords); 112 activeEditor.setDecorations(futurePhraseMarkerDecoration,futurePhraseWords); 113 activeEditor.setDecorations(quantityMarkerDecoration,quantityWords); 114 activeEditor.setDecorations(numberOfHoursMarkerDecoration,numberOfHoursWords); 115 activeEditor.setDecorations(strengthQuantityQualifiedMarkerDecoration,strengthQuantityQualifiedWords); 116 activeEditor.setDecorations(numberOfTimesMarkerDecoration,numberOfTimeWords); 117 activeEditor.setDecorations(dependencyRelation,dependencyRelationWords); 118 } 119 decorateWord(); 120 })); 121 122 //時間に色付け 123 const timeMarkerDecoration = vscode.window.createTextEditorDecorationType({ 124 'borderWidth': '1px', 125 'borderRadius': '2px', 126 'borderStyle': 'solid', 127 // 'backgroundColor': 'rgba(255, 0, 0, 0.3)', 128 'backgroundColor': 'rgba(128, 128, 0, 0.3)', 129 // 'color':'red' 130 'color':'orange' 131 }); 132 133 //強時間に色付け 134 const strengthTimeMarkerDecoration = vscode.window.createTextEditorDecorationType({ 135 'borderWidth': '1px', 136 'borderRadius': '2px', 137 'borderStyle': 'solid', 138 // 'backgroundColor': 'rgba(0, 0, 255, 0.3)', 139 'backgroundColor': 'rgba(128, 128, 0, 0.3)', 140 // 'color':'blue' 141 'color':'orange' 142 }); 143 144 //未来句に色付け 145 const futurePhraseMarkerDecoration = vscode.window.createTextEditorDecorationType({ 146 'borderWidth': '1px', 147 'borderRadius': '2px', 148 'borderStyle': 'solid', 149 // 'backgroundColor': 'rgba(0, 255, 0, 0.3)', 150 'backgroundColor': 'rgba(128, 128, 0, 0.3)', 151 // 'color':'lightgreen' 152 'color':'orange' 153 }); 154 155 //数量に色付け 156 const quantityMarkerDecoration = vscode.window.createTextEditorDecorationType({ 157 'borderWidth': '1px', 158 'borderRadius': '2px', 159 'borderStyle': 'solid', 160 // 'backgroundColor': 'rgba(255, 255, 0, 0.3)', 161 'backgroundColor': 'rgba(128, 128, 0, 0.3)', 162 // 'color':'yellow' 163 'color':'orange' 164 }); 165 166 //時数ノに色付け 167 const numberOfHoursMarkerDecoration = vscode.window.createTextEditorDecorationType({ 168 'borderWidth': '1px', 169 'borderRadius': '2px', 170 'borderStyle': 'solid', 171 // 'backgroundColor': 'rgba(0, 255, 255, 0.3)', 172 'backgroundColor': 'rgba(128, 128, 0, 0.3)', 173 // 'color':'lightblue' 174 'color':'orange' 175 }); 176 177 //強数量修飾に色付け 178 const strengthQuantityQualifiedMarkerDecoration = vscode.window.createTextEditorDecorationType({ 179 'borderWidth': '1px', 180 'borderRadius': '2px', 181 'borderStyle': 'solid', 182 // 'backgroundColor': 'rgba(255, 0, 255, 0.3)', 183 'backgroundColor': 'rgba(128, 128, 0, 0.3)', 184 // 'color':'purple' 185 'color':'orange' 186 }); 187 188 //回数に色付け 189 const numberOfTimesMarkerDecoration = vscode.window.createTextEditorDecorationType({ 190 'borderWidth': '1px', 191 'borderRadius': '2px', 192 'borderStyle': 'solid', 193 'backgroundColor': 'rgba(128, 128, 0, 0.3)', 194 'color':'orange' 195 }); 196 197 //係り受けの対象を色付け 198 const dependencyRelation = vscode.window.createTextEditorDecorationType({ 199 'borderWidth': '1px', 200 'borderRadius': '2px', 201 'borderStyle': 'solid', 202 'backgroundColor': 'rgba(0, 255, 0, 0.3)', 203 'color':'lightgreen' 204 }); 205 // } 206}

json

1{ 2 "強時間": [ 3 "ドア入力右=>常時", 4 "なし=>常時", 5 "なし=>長時間", 6 "ドア入力I=>常時", 7 "扉閉め忘れ=>一定時間以上" 8 ] 9}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

vscode.Rangeの引数にはvscode.Position型を渡す必要があります。 → doc

vscode.Position(行数, 文字数) でインスタンスを生成して渡せば型の解決にはなると思います。

投稿2019/05/05 18:17

wilf

総合スコア300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問