【C#】yieldキーワード
yieldキーワード
yield return文
yield return expression; // expressionにはイテレータの要素を指定
yield return文の評価タイミングはコルーチンであるため、コンピュータが実行状態を保存後に停止させ、次に使用するときに即座に停止直前の状態に復帰する(レジューム)。このため、yield returnが呼び出されると、その時点でメソッドは処理を中断し、制御を返す。
このとき、オブジェクトのMoveNext()に対してyield returnの内容が割り当てられる。
そして、MoveNext()が実行されるたびに、前回のyield return文からブロックが再開される。
以下のコードで、*の箇所にブレークポイントを設定し、デバッグすると動作が分かりやすい。
private static void CreateFruits()
{
var fruits = CreateFruits(1000);// ①
foreach (var fruit in fruits)
{
System.Console.WriteLine(fruit.Name + ":" + fruit.Price);
}
}
private static IEnumerable<Fruit> CreateFruits(int number)
{// *1
for (int i = 0; i < number; ++i)
{
yield retun new Fruit("Name", price); // *2
}
}
①の呼び出しにより*1に移動する。その後、foreachのたびに*2に移動する。yield break文
つまり、yield break文はMoveNext()メソッドの戻り値をfalseにする。
【C#】IEnumerable
IEnumerableインタフェース
IEnumeratorインタフェースを返す抽象メソッドGetEnumerator()を持つ。
IEnumeratorインタフェース
以下の関数とプロパティを持つ。
bool MoveNext() | イテレータを次に進ませる |
void Reset() | イテレータを初期位置に戻す |
void Dispose() | アンマネージリソースの解放 |
object Current | 現在のイテレータ |
代表的な反復処理:foreach文
foreach (T 変数 in コレクション)
{
処理;
}
上記は糖衣構文で、コンパイラによって以下のように展開される。
try
{
IEnumerator e = array.GetEnumerator();
while(e.MoveNext()){
T 変数名 = (T)e.Current;
処理;
}
}
finally
{
Dispose処理;
}
【IT】ダンプ(dump)
ダンプ(dump)
コンピュータの記憶装置(メモリやストレージなど)に記録された内容をまとめて表示、印刷、記録などすることや、そのようにして写しとられた内容をダンプという。
メモリの内容をファイル等に出力することをメモリダンプ
データベースの内容をファイル等に出力することをDBダンプ
という。
正規表現
正規表現とは
例えば、毎年リリースされるiPhoneシリーズについて考える。一般的にiPhoneシリーズは「iPhone バージョン」で表されるが「iPhone 4S」や「iPhone X」など規則性が崩れることがある。 ここで、「iPhone NN Pro」(Nは整数)をデータから探すことを考える。このとき、データ入力者によっては”i”と”Phone”の後に半角スペースや全角スペースを入れる場合や”phone”の様に入力する場合もあり表記揺れが発生するかもしれない。 このとき有用になるのが正規表現を用いたパターンマッチングである。
iPhone NN Proを探す
- “i”と”Phone”の間には「0または1」の「半角スペースまたは全角スペース」を許容する
- 「“Phone”または”phone”」を許容する
- “Phone”と”NN”の間には「0または1」の「半角スペースまたは全角スペース」を許容する
- “Pro Max”シリーズは含まない
メタ文字
量化
メタ文字 | 意味 |
---|---|
? | 直前の表現が0or1 |
* | 直前の表現が0以上 |
+ | 直前の表現が1以上 |
{n,m} | 直前の表現がn以上、m以下 |
選言
グループ分け
位置の指定
メタ文字 | 意味 |
---|---|
^ | 行頭の位置 |
$ | 行末の位置 |
定義済みの正規表現
メタ文字 | 意味 |
---|---|
\t | タブ |
\r | 改行(Carriage Return) |
\n | 改行(Line Feed) |
\d | すべての数字 |
\D | すべての数字以外の文字 |
\s | 垂直タブ以外のすべての空白文字 |
\S | すべての非空白文字 |
\w | アルファベット、アンダーバー、数字 |
\W | アルファベット、アンダーバー、数字 |
任意の1文字にマッチ
指定した文字のどれか
先読みと後読み
肯定の先読み
否定の先読み
肯定の後読み
否定の後読み
iPhone NN Proの正規表現を定義する
“i”と”Phone”の間には「0または1」の「半角スペースまたは全角スペース」を許容する
「“Phone”または”phone”」を許容する
“Phone”と”NN”の間には「0または1」の「半角スペースまたは全角スペース」を許容する。
“Pro Max”シリーズは含まない
C#コード例
class IPhoneSeries
{
private static readonly Regex NNPRo = new Regex("i( | )?(P|p)hone( | )?[\\d]{2,2}( | )?Pro( | )?(?!Max)", RegexOptions.Compiled);
internal static bool IsNNPro(string iphone)
{
var match = NNPRo.Match(iphone);
return match.Length == iphone.Length;
}
}
【Java】エラーと例外
Javaのエラーと例外
Javaには他言語と異なりException配下に2つの系統があり、Runtime Exception(非検査例外)とその他(検査例外)がある。
Error
このため、catchしても意味がない
- StackOverflowError
- OutOfMemoryError
- ClassFormatError
非検査例外
このため、try-catchは強要されない。
- NullPointerException
- ArrayindexOutOfBoundsException
検査例外
このため、try-catchが強要される。
- IOException
- SQLException
【MicroSoft Office】パスワード
ファイルのパスワード
パスワードをかけた場合の挙動を確かめる。
書き込み | 読み取り | 書き込み・読み取り |
---|---|---|
zipに変更できる | zipに変更できない | zipに変更できない |
読み取りパスワードが設定されている場合は通常のOffice Open XML形式ではなく、バイナリ形式になっている。
Excelの保護
- ブックの保護_パスワードを使用して暗号化
- ブックの保護_ブック構成の保護
- ブックの保護_現在のシートの保護
- ブックの保護_最終版
ブックの保護_ブック構成の保護
関連する要素は
18.2.29 workbookProtection[p.1590], CT_WorkbookProtection[p.3967, p.3962]
ワークブックのデータ保護を指定する要素。アプリケーションによっては対応しておらず、その場合は無視される。
パスワードがハッシュされてこの要素に格納されている場合は、UTF-16LEでエンコーディングされた文字列から始まる。BOMがある場合はハッシュ値の計算前に除去される。
すべての属性はoptionalである。
属性 | 詳細 |
---|---|
lockRevision | ワークブックの改訂をロックするフラグ(default = false) |
lockStructure | ワークブックの構造をロックするフラグ(default = false) 1またはtrueの場合、ワークブックの構造がロックされ、ワークシートの移動・削除・表示・非表示・名前の変更・新しいワークブックの挿入ができなくなる。 |
lockWindows | ウィンドウのロック情報を表すフラグ(default = false) 1またはtrueの場合、ワークブックのウィンドウが固定されており、ファイルを開いたときはいつも同じサイズと位置で開かれる。 |
revisionsAlgorithmName | revisionsHashValue属性のハッシュ値を計算するために、salt属性と入力パスワードに使用される暗号化ハッシュアルゴリズムが指定されている。 |
revisionsHashValue | リビジョンロックを解除するために保存されているパスワードのハッシュ値が指定されている。 |
revisionsSaltValue | ハッシュ化する際に、一方向性関数の入力に加えられるランダムなデータ |
revisionsSpinCount | ハッシュ関数の繰り返し回数が指定されている |
ブックの保護_現在のシートの保護
関連する要素は
18.3.1.85 sheetProtection[p.1701]、CT_SheetProtection[p.3940,p.3926]
シートに保護が掛かっていることを表す要素。すべての属性はoptional
属性 | 詳細 |
---|---|
algorithmname | 暗号化ハッシュアルゴリズムが指定されている |
autoFilter | 1またはtrueの場合、シートにオートフィルタを指定することはできない |
deleteColumns | 1またはtrueの場合、列の削除ができない |
deleteRows | 1またはtrueの場合、行の削除ができない |
formatCells | 1またはtrueの場合、セルの書式設定ができない |
formatColumns | 1またはtrueの場合、列の書式設定ができない |
formatRows | 1またはtrueの場合、行の書式設定ができない |
hashValue | ワークシートの編集のためのパスワードのハッシュ値 |
insertColumns | 1またはtrueの場合、列の挿入ができない |
insertHyperlinks | 1またはtrueの場合、ハイパーリンクの挿入ができない |
insertRows | 1またはtrueの場合、行の挿入ができない |
objects | 1またはtrueの場合、オブジェクトの編集ができない |
pivotTables | 1またはtrueの場合、ピボットテーブルの指定ができない |
scenarios | 1またはtrueの場合、シナリオの編集ができない |
selectLockedCells | 1またはtrueの場合、セルのロック指定ができない |
selectUnlockedCells | 1またはtrueの場合、セルのロック解除ができない |
sheet | 1またはtrueの場合、シートが保護される |
sort | 1またはtrueの場合、ソートができない |
spinCount | ハッシュ関数の繰り返し回数が指定されている |
ブックの保護_最終版
workbookパーツのrevisionPtr要素
coreパーツのcontentsStatus要素
【Microsoft Word】アカウント情報を消す
作成者と前回保存者
対象のファイルを右クリック⇒[プロパティ]⇒[詳細]でWordのアカウント情報が"以下の画像のように作成者"と"前回保存者"に表示されてしまうので、削除する方法
プロパティから削除
Wordのドキュメント検査から削除
XMLから削除
- creator:コンテンツの主な責任者
- lastModifiedBy:最後の修正を行ったユーザ