SQLの窓

2014年09月20日


Excel : 特殊操作ドキュメント

元々は、Excel 2003 で正式ドキュメントで存在していました。以下のリンク先は、新しいリンクを探して適用しました。

1) 列番号や行番号などの Excel 標準のフォントを変更するには

2) 表の項目部分を画面上で固定する,毎ページに印刷する方法

3) 印刷範囲を設定するには

4) ワークシートの背景に画像を設定するには

5) ワークシートの一部を画像として貼り付けるには





posted by lightbox at 2014-09-20 21:13 | Microsoft Office | このブログの読者になる | 更新情報をチェックする

2014年09月18日


VS(C#) : Json.NET を使用して文字列形式の JSON をプログラムで参照する具体的な方法

一番可読性の良い、管理しやすい方法は、JSON のフォーマットと同じ項目を持つ『クラス』を作成して一括変換する方法です。JSON の中の階層は、そのまま実装するクラスの中で配列にしたり、さらに細かいクラスを作成して対応します。

手っ取り早い方法は、JObject にパースして、JavaScript 内で参照する方法と同じ書式で参照します。いずれにしても、JavaScript との連携になる場合も考えて、どちらを使うかを決定すればいいと思います。

テスト用 JSON
{
    "id": 91500526,
    "simple_array": [1,2,3,4,5],
    "object_array": [
        {"high":1,"middle":2,"low":3},
        {"high":21,"middle":22,"low":23},
        {"high":31,"middle":32,"low":33}
    ],
    "object_data": {"sworc":"lightbox"},
    "profile_background_tile": false,
    "notifications": false,
    "profile_sidebar_fill_color": "FFF7CC",
    "location": "\u5927\u962a\u5e9c",
    "screen_name": "sworc",
    "profile_image_url": "http:\/\/a0.twimg.com\/profile_images\/2388651010\/zmq5cwm5nsvngpfrtr3f_normal.png"
}
クラスを使った一括変換

元々の JSON に合うフォーマットのクラスを事前に作成して、JsonConvert.DeserializeObject<クラス名>(文字列); で変換します。後は、クラスとして参照するだけです。

Serializing Collections,Deserializing Collections,Deserializing Dictionaries

JObject を使った参照

JObject jo = JObject.Parse(文字列); を実行して、jo を使って参照します。実際の JavaScript と同様の ["文字列"] 形式でプロパティを参照して行きます
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;

namespace Json130906
{
    class Program
    {
        static string hl = "-----------------------------------------------------";
        static string json = null;
        static void Main(string[] args)
        {
            // 処理全体を簡単に try 〜 catch する為に
            JsonTest jt = new JsonTest();
            try
            {
                jt.Test();

                Console.WriteLine(hl);
                Console.ReadLine();
                // ******************************************
                // クラスを使った一括変換
                // ******************************************
                MyJson data = JsonConvert.DeserializeObject<MyJson>(json);
                Console.WriteLine(data.id.ToString());
                Console.Write(
                    "{0}:{1}:{2}:{3}:{4}\n{5}:{6}:{7}\n{8}:{9}:{10}\n{11}:{12}:{13}\n",
                    data.simple_array[0].ToString(),
                    data.simple_array[1].ToString(),
                    data.simple_array[2].ToString(),
                    data.simple_array[3].ToString(),
                    data.simple_array[4].ToString(),
                    data.object_array[0].high.ToString(),
                    data.object_array[0].middle.ToString(),
                    data.object_array[0].low.ToString(),
                    data.object_array[1].high.ToString(),
                    data.object_array[1].middle.ToString(),
                    data.object_array[1].low.ToString(),
                    data.object_array[2].high.ToString(),
                    data.object_array[2].middle.ToString(),
                    data.object_array[2].low.ToString()
                );
                Console.WriteLine(data.object_data["sworc"]);
                Console.WriteLine(data.profile_background_tile);
                Console.WriteLine(data.notifications);
                Console.WriteLine(data.profile_sidebar_fill_color);
                Console.WriteLine(data.location);
                Console.WriteLine(data.screen_name);
                Console.WriteLine(data.profile_image_url);

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine(hl);
            Console.WriteLine("処理を終了しました");
            Console.ReadLine();

        }

        // ******************************************
        // 処理用クラス
        // ******************************************
        private class JsonTest
        {
            public void Test() {
                // 簡単なエントリと、単純配列と、オブジェクト配列を含んだ JSON
                string url = "http://toolbox.winofsql.jp/json/sample1.json";

                // HTTP でのアクセス
                WebClient wc = new WebClient();
                // UTF-8 として取得
                wc.Encoding = Encoding.UTF8;
                // 文字列として取得
                json = wc.DownloadString(url);

                // コマンドプロンプト上に表示して一旦停止
                Console.WriteLine(json);
                Console.WriteLine(hl);
                Console.ReadLine();

                // ******************************************
                // 文字列から JObject を作成
                // ******************************************
                JObject jo = JObject.Parse(json);

                // JProperty で 一覧表示
                foreach (JProperty jp in jo.Properties())
                {
                    // 下位にデータがある場合は、Array または Object と表示されます
                    Console.WriteLine("タイプ : " + jp.Value.Type.ToString());
                    // 一番上位レベルに対する値を文字列で表示
                    Console.WriteLine(jp.Name + " --> " + jp.Value.ToString());
                }

                // コマンドプロンプト上で一旦停止
                Console.WriteLine(hl);
                Console.ReadLine();

                string[] key = {
                               "id","simple_array","object_array","object_data",
                               "profile_background_tile",
                                "notifications",
                                "profile_sidebar_fill_color",
                                "location",
                                "screen_name",
                                "profile_image_url"
                           };

                // JObject でキーを指定して直接参照
                foreach (string value in key)
                {
                    Console.WriteLine(jo[value].ToString());
                }

                // コマンドプロンプト上で一旦停止
                Console.WriteLine(hl);
                Console.ReadLine();

                // ******************************************
                // 下位階層単純配列の直接参照
                // ******************************************
                Console.WriteLine(jo["simple_array"][0].ToString());
                Console.WriteLine(jo["simple_array"][1].ToString());
                Console.WriteLine(jo["simple_array"][2].ToString());
                Console.WriteLine(jo["simple_array"][3].ToString());
                Console.WriteLine(jo["simple_array"][4].ToString());

                // ******************************************
                // 下位階層オブジェクト配列の直接参照
                // ******************************************
                Console.WriteLine(jo["object_array"][0]["high"].ToString());
                Console.WriteLine(jo["object_array"][0]["middle"].ToString());
                Console.WriteLine(jo["object_array"][0]["low"].ToString());
                Console.WriteLine(jo["object_array"][1]["high"].ToString());
                Console.WriteLine(jo["object_array"][1]["middle"].ToString());
                Console.WriteLine(jo["object_array"][1]["low"].ToString());
                Console.WriteLine(jo["object_array"][2]["high"].ToString());
                Console.WriteLine(jo["object_array"][2]["middle"].ToString());
                Console.WriteLine(jo["object_array"][2]["low"].ToString());

                // ******************************************
                // 下位階層オブジェクト直接参照
                // ******************************************
                Console.WriteLine(jo["object_data"]["sworc"].ToString());

            }
        }

        // ******************************************
        // 一括変換用のクラス
        // ******************************************
        private class MyJson
        {
            public int id { get; set; }
            public int[] simple_array { get; set; }
            public Object_Array[] object_array { get; set; }
            public JObject object_data { get; set; }
            public string profile_background_tile  { get; set; }
            public string notifications  { get; set; }
            public string profile_sidebar_fill_color  { get; set; }
            public string location  { get; set; }
            public string screen_name  { get; set; }
            public string profile_image_url { get; set; }
        }
        private class Object_Array
        {
            public int high { get; set; }
            public int middle { get; set; }
            public int low { get; set; }
        }

    }

}

Json.NET

ダウンロード
ドキュメント

ダウンロードしたファイルを解凍するとバイナリがフォルダ毎に別れています。プロジェクトの中にフォルダを作成して、その中へ既存のファイルとして呼び込んでから、そのパスで参照します。
-Net45:
  .NET latest (4.5)

-Net40:
  .NET 4.0

-Net35:
  .NET 3.5

-Net20:
  .NET 2.0

-WinRT:
  Windows 8 Store

-Portable45:
  .NET 4.5, Windows Phone 8, Windows 8 Store

-Portable40:
  .NET 4.0, Windows Phone 7, Windows 8 Store, Silverlight 4
関連する記事 JSONLint サービスを使って、JSON が正しいかどうかをチェックして整形する。
タグ:JSON
posted by lightbox at 2014-09-18 21:47 | VS(C#) | このブログの読者になる | 更新情報をチェックする

Seesaaブログの page_name 変数の3つ以上の OR 条件の記述方法

他の変数での動作は確認していませんが、() による優先順位の指定によって常に、二つの条件( ここでは、+ 演算子の左右 )が確定してから他の比較を行うようにしないと、ページがエラーとなって構成されません。

何度か試すとうまくいくと思います。これによって、アーカイブとカテゴリとタグページだけ何かコンテンツを追加するという事が可能になります。

((A)+(B)) + ((C)+(D))
は OK のようです。

※ (A) は、page_name eq 'category' というように一つの条件式を表わすので、
※ () で優先順位を明示してやる必要があります。

page_name は、トップページ、単独記事、アーカイブ、カテゴリ、タグというそれぞれの記事の表示方法の特性にあわせてカスタマイズする為の重要な変数なので、OR 条件は記述を簡潔にする為に必要です。

※ AND 条件は、if: を入れ子にすれば指定できます
<% if: (( page_name eq 'category' ) + ( page_name eq 'archive' )) + ( page_name eq 'tag' ) -%>

<b>SQLの窓</b>

<% /if -%>

関連する記事

Seesaaブログの記事のカテゴリ番号毎に関連するリンクを付加する( OR 条件による複数カテゴリを一括 )




Seesaa独自タグ簡易リファレンス

タグ:Seesaa
posted by lightbox at 2014-09-18 20:58 | Seesaa プログ管理支援 | このブログの読者になる | 更新情報をチェックする

Seesaaブログ : 特定のカテゴリに属する記事のみ特定部分に HTML を付加する方法



これは、コンテンツの「記事」の コンテンツHTML編集で行います。記事本文は <% article.entire_body | bodyfilter(article_info,blog) %> というように書かれているので変更できませんが、その前後であれは付加する事ができます。

カテゴリ番号もたしか使えたはずですが、以前使っていて後からメンテナンスするのにどのカテゴリか解りづらいという欠点があったのでこちらがおすすめです。

但し、カテゴリ名を変更すると動かなくなるので注意して下さい。
<% if:article_category.name eq 'カテゴリ名' -%>

特定カテゴリで表示したい HTML の記述

<% /if -%>



※ カテゴリ番号の場合はこんな感じです

<% if:article.category eq '7154748' -%>

特定カテゴリで表示したい HTML の記述

<% /if -%>



※ この記事にも、カテゴリ特有のリンクを付加しています

Seesaa独自タグ簡易リファレンス

posted by lightbox at 2014-09-18 20:28 | Seesaa プログ管理支援 | このブログの読者になる | 更新情報をチェックする

2014年09月14日


HTML整形ツール / 属性単位の改行機能付き

http://u670.com/pikamap/htmlseikei.php



ついこの間まで、属性単位の改行機能は無かったのですが、自分がブログでこの機能があったらいいな・・・とお願いしたら、こころよくすぐ作成してくれました。その際、PHP の埋め込みについてもうまく動作するようにお願いして、とても綺麗に PHP の VIEW を作成できるようになりました。

他人のソースコードで、画面を作る為に if やら while やらで PHP ソースからは何が出来上がるかさっぱり解らない場合があります。その場合は、いったん HTML として出力してこの整形を実行すると、PHP ソースコードの意図がかなり明確になります。

その後の改造として、整形後のコードに PHP の変数を埋め込んで正しい VIEW へと導くわけです。最後にもう一度、PHP として整形すると良いコードが完成します。



posted by lightbox at 2014-09-14 01:48 | WEBサービス | このブログの読者になる | 更新情報をチェックする

https://archive.org/web/ で、消失したソフトウェアをダウンロードする



知らなかったのは自分だけかもしれませんが、世界中の WEB サイトを巡回して、その時のそのままの状態をある程度再現できるような保存を行っているようです。つまり、自動的にバージョン管理もされている事にもなるようです。実際にいろいろダウンロードできましたが、比較的小さいファイルばかりで、現実問題としてサイズの上限はあるかもしれません。

ただ、これのおかげで閉鎖されてしまったサイトのフォントやソフトウェアをダウンロードする事ができましした。( たいていサイトごと保存しているようです )

自分にしたら、全く想定外の出来事でそこまでする労力に感心しました。


但し、当時の URL をどうやって手に入れるかという問題はあります。


2014/9/14 追記

今はサイトが消失している ttfedit 配布サイト(http://www.uri.sakura.ne.jp/~cosmic/yuno/) ですが、https://archive.org/web/ で検索すると、2003 年の 2月で無事ダウンロード(ttfedit.lzh)できました。



posted by lightbox at 2014-09-14 01:28 | WEBサービス | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり