解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

Visual Studio 2017 の C# で OpenCvSharp を NuGet からインストールする



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


以前の記事で、 OpenTK をダウンロードして Visual Studio 2017 で使用出来るように設定しました。

Visual Studio 2017 の C# で OpenTK を手動で使えるようにする - 解析エンジニアの自動化 blog


なかなか手間のかかる作業で、すぐに忘れてしまうと思います。

OpenTK は設定してしまったので、 NuGet から OpenCvSharp を設定してみます。



動作環境


Windows 7
Visual Studio 2017
・OpenCvSharp



環境設定

VS 2017 でプロジェクトの新規作成

『新しいプロジェクトの作成』を押します。

図1 Visual Studio 初期画面


Windows フォーム アプリケーション』を選択して、プロジェクト名を入力します。

図2 プロジェクト設定


新しいプロジェクトが出来ました。

図3 プロジェクト作成したところ


NuGet からインストール

メニューバーの『プロジェクト』の『NuGetパッケージの管理』をクリックする。

図4 NuGet 表示


『参照』タブを開いて、検索テキストボックスに『opencvsharp』と入力すると、OpenCV関連のパッケージが表示されるので、『OpenCv Sharp-AnyCPU』を選択して、『インストール』ボタンを押します。

図5 インストール


以上でインストール終了です。



テスト

テストとして、OpenCVを使用してみます。

GUI

ボタンが1つだけのGUIを作成します。

図6 GUI


関数作成

作成したボタンをダブルクリックすると、ソースコードを書き込む関数が作成されます。

図7 作成された関数


赤枠の中にソースコードを書き込みます。

図8 ソースコードを書く場所


ソースコード

図8 の赤枠で囲まれたソースコードを書く場所に下のソースコードを書き入れます。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
using OpenCvSharp;
using OpenCvSharp.CPlusPlus;
 
namespace OpenCvsharp_Sample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // Mat クラスで画像を作成する
            int screenHeight = 620;
            int screenWidth = 400;
            Mat img = new Mat(screenHeight, screenWidth, MatType.CV_8UC3, new Scalar(0, 0, 0));
 
            // 円を描画する
            Cv2.Circle(img, new OpenCvSharp.CPlusPlus.Point(180, 150), 150, new Scalar(255, 255, 255), 3);
 
            // 矩形を描画
            Cv2.Rectangle(img, new OpenCvSharp.CPlusPlus.Rect(180, 150, 150, 100), new Scalar(0, 255, 0), 2);
 
            // 画像表示
            Cv2.ImShow("Image", img);
        }
    }
}



結果

ボタンを押すと丸と四角が描画された『Image』というウィンドウタイトルのウィンドウが表示されます。

図10 OpenCvSharp



コメント

NuGet の簡単さは素晴らしいですね!!

python でいう pip みたいなものですかね!

OpenCV は画像処理系のライブラリとしては有名ですし、色んな関数があるので、ドンドン使いたいです!



以上

Visual Studio 2017 の C# で OpenTK を手動で使えるようにする



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


OpenGLは優れたグラフィックライブラリです。
使えばたちまち凄いグラフィカルなソフトが作れ…るかもしれない。

まぁ、淡い期待を胸に抱いてとりあえず Visual Studio 2017 で使えるように環境を整えたいと思います。



動作環境


Windows 7
Visual Studio 2017
・OpenTK



環境設定

C# から OpenGL を使うためには OpenTK といったラッパークラスを使う必要があります。

手順をまとめます。

OpenTK のダウンロード

『opentk-1.0.0-rc1.exe』でインターネット検索すると図1 のサイトにたどり着けると思います。


図1 ダウンロードサイト


5秒くらい待つと図2 の様に自動的にダウンロードを開始します。


図2 ダウンロード開始


OpenTK のインストール

インストールはダウンロードした exe ファイルをダブルクリックして、『 Yes 』ばっかり押していけば OK です。

図3 インストーラ起動


図4 インストールフォルダの画面


VS 2017 でプロジェクトの新規作成

Visual Studio 2017 で 『Windows フォーム アプリケーション』のプロジェクトを新規作成します。

『新しいプロジェクトの作成』を押します。

図5 初期画面


Windows フォーム アプリケーション』を選択して、プロジェクト名を入力します。

そして、『OK』ボタンを押します。

図6 プロジェクト名設定


プロジェクトを作成すると図7 の様な画面になります。

図7 プロジェクトが出来たところ


OpenTK の参照

インストールした OpenTK をプロジェクトから参照します。

ソリューション エクスプローラの『参照』を右クリックして、プルダウンメニューの『参照の追加』をクリックします。

図8 参照の追加


参照マネージャーの『参照』をクリックして『参照』ボタンをクリックします。

図9 参照マネージャー


さっき OpenTK をインストールしたフォルダに移動していきます。

図10 参照選択


『OpenTK.dll』と『OpenTK.GL Control.dll』を選択して、『追加』ボタンを押します。

図11 dll 選択


参照マネージャーに『OpenTK.dll』と『OpenTK.GL Control.dll』が追加されました。
『OpenTK.dll』と『OpenTK.GL Control.dll』のチェックボックスにチェックを入れて(チェックが入っているとは思いますが)『OK』ボタンを押します。

図12 参照追加


ソリューション エクスプローラの参照に Open TK の必要な dll が追加されました。

図13 参照に dll が追加されたところ


OpenTK のコントロール追加

『Form1.Designer.cs』を開きます。

開いたら、赤四角で囲われた『+』をクリックして、ソースコードを表示させます。

図14 Form1.Designer.cs


ソースコードを表示すると図15 のようになってます。

図15 展開した Form1.Designer.cs


図16 の『追加』と記載している矢印(↓↑)で囲まれたソースコードを追加します。

図16 コントロールを追加した Form1.Designer.cs



テスト

図16 まで設定出来たら、『F5』を押してプログラムを実行します。

図17 実行画面


Form1.cs[デザイン]を見ると図18 の様に黒い四角が表示されています。

これで、 OpenTK コントロールがフォームに追加されました。

図18 Form1.cs[デザイン] 画面



コメント

かなりめんどくさい作業でした。

すぐ忘れちゃうし備忘録も兼ねてまとめました。



以上

C# でテスト用3次元点群データを作成する



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


関数を単体でテストする時に、サンプルはあるんだけど開発の初期段階に不必要なほどに大規模過ぎたり、手軽に動作確認出来ない状況でした。

手頃なサイズのテスト用の点群データが欲しかったので、乱数を使って自分で用意することにしました。



動作環境


Windows 7
Visual Studio 2017



プログラム

C# でコンソールアプリケーションから3次元点群データを作ることにしました。

ソースコード


using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TestNodeDataMaker
{
    class Program
    {
        static void Main(string[] args)
        {
            // 出力ファイル名設定
            string strFileName = "Test-Nodes-Data.txt";
           
            // ノード作成点数設定
            int Num = 500;
 
            // ノード座標作成用乱数
            Random r = new Random();
            int limitLowerX = -500; int limitUpperX = 500;
            int limitLowerY = -200; int limitUpperY = 380;
            int limitLowerZ = -100; int limitUpperZ = 100;
 
            // ノード座標格納用変数
            double X; double Y; double Z;
 
            // ノードデータ格納用変数
            string data = "";
 
            // 進捗用
            float n;
 
            for (int i = 1; i < Num + 1; i++)
            {
                // 座標データの作成
                X = r.Next(limitLowerX, limitUpperX) * r.NextDouble();
                Y = r.Next(limitLowerY, limitUpperY) * r.NextDouble();
                Z = r.Next(limitLowerZ, limitUpperZ) * r.NextDouble();
 
                // ノードデータ生成
                data += string.Format("{0,8}", i) + ",";
                data += string.Format("{0,25}", X) + ",";
                data += string.Format("{0,25}", Y) + ",";
                data += string.Format("{0,25}", Z);
                data += Environment.NewLine;
 
                // 進捗表示
                n = (float)i / (float)Num * 100;
                Console.WriteLine("進捗: {0} %", n);
            }
 
            // デスクトップパス取得
            string desktopPath = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
 
            // デスクトップにファイル出力
            File.WriteAllText(desktopPath + "\\" + strFileName, data);
 
            Console.WriteLine("終了するには何かキーを押してください");
            Console.ReadKey();
        }
    }
}



結果

プログラムを動作させると図1 の様な画面があらわれます。

図1 図


出力された3次元点群データのテキストは図2 の様になります。

       1,          6.3419938172875,         32.3797981638367,         30.2311103065643
       2,         65.3217181774423,        -24.1840215437971,        -59.7495026326503
       3,         133.303746833142,         153.961790378653,        -15.0303173880234
       4,        -165.354889512227,        -157.992553269021,        -10.2588013579411
       5,        -165.324958051241,         6.73502210096224,         28.8967961803529
       6,         70.8150947209518,         3.87346041382917,        -1.02425204730791
       7,        -247.969437494394,        -158.615209471721,        -65.7111761149537
       8,        -273.171083640853,        -34.7948258476308,         18.5856005337954
       9,         413.639641303401,         78.6291895064661,         77.9080133037213
      10,         321.776127606526,         74.6001970277169,        -13.7713193072804
      11,        -98.3101255829959,         105.284636926504,       -0.321951792725339
      12,        -294.764162543586,         66.9673876850714,         27.9224270265188
      13,        -14.0366258211604,        -4.17781448186273,          19.425438293454
      14,        -200.028653564876,         284.383265075452,        -6.95180639110124
      15,         6.26787774370419,        -104.621650874904,        -49.8994326800571
      16,         190.686348534043,         83.0590186706088,         13.1859776401827
      17,        -100.734863492071,         34.4978201782786,         23.1548094000457
      18,         148.056873064515,        -52.5473776099027,         6.69026045440243
      19,        -10.9465185464111,        -16.4920338366609,          -22.70314659211
      20,        -95.5632537377827,         25.8589797405801,         11.0018485835762
      21,         82.2883799831794,         46.1520711580068,         -11.669955024342
      22,        -91.4098852152982,         83.6798656306601,         22.2636931139341
      23,        -357.578080959422,         12.7621054969552,        -19.6622081565029
      24,            60.1613564194,         23.4275280607061,        -5.57761998175533
      25,         5.61259095958089,         16.8930173050114,         6.54400835118443
      26,        -267.275660079101,         37.5950771186478,        -7.80450549992011
      27,        -183.079307418819,         -4.2589268275811,        -1.29120744033307
      28,        -157.735602482099,          241.30158039243,        -42.7793646337368
      29,         73.2819660530807,         -7.9249531961628,         18.5657552646314
      30,         88.0711913938034,         81.7476144618111,         33.5162309391965
      31,         39.9376362831973,         95.6743854301397,         2.93921116736681
      32,          161.38977017784,        -2.82450883594552,         63.8642416605094
      33,        -298.021263246434,         117.556948885581,        -65.3192460054156
      34,         50.7092538288372,         68.0359133929181,        -40.9445107131938
      35,        -26.4323570748942,        -101.755449050924,         46.7479159667845
      36,         89.5660319209872,          122.22089270792,         25.6809449706604
      37,        -300.831166354395,         -65.647461558528,        -42.9804614474906
      38,        -126.660514549194,        -17.9701973516355,        -89.7130199348149
      39,         98.1656872006905,         12.9794744090082,         3.72425763342728
      40,         -139.66510077364,         10.7054486333884,        -22.8295927410152
      41,         -9.4116474918144,         127.439024580381,         6.13867892610779
      42,         255.408656640169,         339.344042249184,         -2.7215962646164
      43,         2.81490457235598,         94.8636378137691,         5.42626769068943
      44,        -200.641937854533,         -24.516528952176,         34.6722081465052
      45,        -77.1691441662466,        -106.399924418144,         -56.039353760909
      46,         21.0030906996704,         123.406785375628,         1.39782863920453
      47,         176.782639334808,         34.9095082180153,         -4.0461332965857
      48,         16.8738579400228,         174.517812856714,         18.9749236530508
      49,         24.4490881052097,         -52.543481678955,        -35.1524266559409
      50,         17.7515041379964,        -23.6562858399266,        -19.2276173360774
      51,        -129.411712371005,         1.95745239497975,        -12.5889378835396
      52,        -109.683135451601,         2.57952889733926,        -43.4591697656825
      53,         5.10268943668468,        -62.1863377518888,        -56.8034968566166
      54,         49.5913810457994,         86.2068079813415,        -60.4896832632318
      55,         74.7558696636725,         106.903269979592,        -49.9459976996044
      56,         175.889088328876,         89.2549326304602,        -14.4146394205348
      57,        -303.333589095778,         96.3268202507528,        -61.5039032266959
      58,        -8.81101162583149,        -51.3552995353729,         -20.371362183416
      59,        0.769677474521882,         106.286783966369,         10.9689298397717
      60,        -81.5934141262404,        -59.4882528425605,         5.50954979914685
      61,         166.772447653009,         163.250747143408,         6.15399366531241
      62,        -109.240760470387,         318.371378323702,        -8.22261119504581
      63,        -15.0156844281665,         25.4604880583754,         68.9795114654021
      64,         20.8262361217412,         48.0703781904049,        -1.48183199087243
      65,         170.216010450486,         90.0770764490948,        -26.7864745607537
      66,        -276.698163275466,        -28.3542746144134,         11.4408767649163
      67,        -353.344866215878,         55.8952323840443,        -24.6672371442743
      68,          -115.0395544409,         85.1865126142216,        -29.1427724860342
      69,        -4.94535075963724,         59.2193242028446,         33.7554558356085
      70,        -273.329166338467,         223.286810435023,         4.16176491610788
      71,        -337.301490913751,        -55.0428533307476,         70.5661194653093
      72,        -71.0852696807521,         3.61790055205016,        -10.2547001062216
      73,        -28.1268849773923,         227.505139106654,         81.8737271231942
      74,         -14.963066767884,        -5.01205905015211,         67.5409211379201
      75,        -63.1897043842774,         151.689773578052,         76.9616559548125
      76,          100.42502127887,         165.029562626513,        -18.4933001308205
      77,         62.1725165509491,         151.142906411152,        -0.56603472892476
      78,        -119.553616437853,        -65.3133597603596,         39.1569693513014
      79,         18.7036565778328,         19.2657941390135,        -31.6699393660156
      80,         355.846356386247,         99.6918463644999,        -7.65928387439776
      81,        -35.4725425194355,        -32.4307089897016,        -29.8217318923314
      82,        -216.149859641748,         61.8821159460964,        -13.0029444084516
      83,        -196.867156269433,         16.6022419624972,         32.7018313769725
      84,         70.1210873528016,        -169.903297903903,        -25.4836685068364
      85,        -123.407965996027,         -33.076355584467,         12.6931990704933
      86,         66.2818539069415,         67.8059765220648,         13.0988166938065
      87,         289.224812059768,        -59.6872237388451,         6.55229336468144
      88,         106.399870024249,         130.633189056829,         48.4325176609831
      89,         82.8097698887856,        -37.8392569841069,         27.2337238989927
      90,        -88.7842459291146,         140.640141105577,        -38.8751226872556
      91,         8.58053577066424,        -49.9553886987061,         -1.1158681181799
      92,         133.324035032338,         175.013630190871,        -8.65878452903534
      93,        -17.4537289754738,        -15.1217840086305,        -58.1977587576014
      94,         217.899434909643,         138.009871363644,         48.9656780576174
      95,        -131.006487182345,         2.43333691471877,        -2.82333343514397
      96,         30.4542316708035,         49.9430814059186,         65.4400511688739
      97,         60.2053618804577,        -176.763527664711,         9.14662136842805
      98,         11.5612864082499,         3.61769690579628,         59.8027736841714
      99,        -72.4927380320117,         -164.27090820124,         15.8869506408865
     100,         364.829982468314,        -51.5784576281805,        -36.7481601348837
     101,          60.401469329559,        -48.5828131440016,         66.2956767055651
     102,         87.7486163548886,        -50.7613273955701,        -28.5193500055556
     103,         338.638888944704,        -15.2976079225995,        -68.0031008925303
     104,         -64.952917394672,         81.2681529118066,         11.0945063322291
     105,        -33.9015936059419,         30.3810116296546,         1.72013698598376
     106,         47.1030224753092,         39.3768034425456,        -35.5573818346287
     107,        -58.8981533920849,        -90.1360125165135,        -1.99553185980559
     108,       0.0792428143691471,         10.4139543540841,          89.656913825151
     109,         229.940378528526,         113.701214971813,        -6.55172362763049
     110,         -94.927086071543,        -110.016951194972,        -19.8978306157039
     111,        -85.2055140515815,        -1.19811793658795,         56.3762599762419
     112,        -390.487261053402,         26.4107551702348,        -34.9398317327443
     113,         7.98997254250104,         104.482526968924,        -24.0853492655257
     114,         150.695351441715,         134.306241685667,        -3.67941758114817
     115,        -59.6929290493452,        -23.0021937051798,         25.4875800136885
     116,         199.127480964701,        -112.916888742203,         1.98734101233414
     117,         166.932021967569,        -56.5766034585315,        -13.6197913268673
     118,         -2.6838746101986,        -1.05980261138631,         56.7061665964807
     119,        -204.460513947746,         33.8146420222775,         33.8898406875738
     120,        -46.9754186165405,        -32.0518984925244,         32.1325278953335
     121,         19.9278105958029,        -156.993943170176,        -22.4553218723532
     122,         116.058043850147,         144.015789865523,         8.23307357180541
     123,         -20.418115366445,        -5.55034787699131,        -57.1309592328644
     124,          90.995980539823,         9.76868410118329,         9.09109577401127
     125,         -203.75801660668,         103.866900263292,         5.56137170156528
     126,        -306.386467548733,         128.529560134061,        -78.8460682178131
     127,        -221.128872070056,         -9.0942346184022,        -11.6523812020441
     128,        -219.600240892544,         29.9185861004137,        -50.9470653054058
     129,        -166.585805413586,         73.0132072805489,        -23.7850106790592
     130,        -42.1340550110368,         44.8467388464356,         69.0282889614013
     131,        -68.9870568071432,        -140.701613767399,         30.9831221708949
     132,        -287.323579078225,        -53.0724102813156,         2.55001383021009
     133,        -93.3723181399388,         29.9870242527626,        -26.6138231063326
     134,        -70.2531459770413,         4.68763035335002,        -40.0513188764692
     135,        -142.044251885751,         3.02060383000439,        -12.0514604076983
     136,        -159.411908314755,         71.9264291762032,        -6.34094333198897
     137,         -84.210931577818,         173.438612193073,         1.16167212331745
     138,        -55.1406132239572,        -4.53700500937971,        -62.6856164493065
     139,         13.1696554893486,         150.223817809123,          44.229737252104
     140,       -0.320421978514838,         113.860593762184,       -0.131083010756915
     141,         2.94747305612428,        -1.67089832651936,        -54.0977297076479
     142,         329.782225074611,        -18.7080188317727,         1.04628123158882
     143,        -328.574111209518,         38.9808056917883,         12.9091258053245
     144,        -10.1330575394132,         72.6725299436005,        0.996067334895985
     145,        -233.231729377169,         48.8089929352556,         17.2936706288223
     146,        -339.661919749184,         257.708157448428,        -50.3672869481925
     147,         104.276953791397,          120.27198974894,        -7.33020950077577
     148,        -41.4693447092871,        -29.2977268971958,        0.906414802142612
     149,         27.4277125370818,        -3.67412485725904,         27.4306238393442
     150,        -2.63102705061018,         68.9778440035776,        -41.3079289194699
     151,         290.723141472192,         37.6706394728602,         29.8439792626742
     152,        -80.1500326628564,         83.5460568957711,        -31.0063328067802
     153,         117.352241553996,          111.19438043432,        -45.7728272540368
     154,        -182.187096810987,        -69.4066526318931,         11.2400189560093
     155,         196.076326382382,        -84.3303245065409,        -4.63425342535332
     156,        -406.632022391368,        -26.1649251310923,         14.4757216528411
     157,        -115.343949080139,        -47.2255554065227,         5.65578037624051
     158,        -16.5697376078785,        -75.6127865592077,         1.23047670872439
     159,        0.590463283281058,         155.999245220329,         57.0183864305813
     160,        -60.4620663390784,        -68.0941326744362,        -7.76412701595767
     161,         204.093082978899,         181.515304197797,        -9.21720033242237
     162,        -81.4330328066987,        -12.8835143004002,        -48.8231472083475
     163,         40.5371628042949,         231.060901459801,        -22.7856738505818
     164,        -134.839192687925,         5.65302511940385,        -24.0484962351846
     165,        -12.9331438303614,        -103.809997619507,         30.3180282825222
     166,         19.9031456368524,        -0.11220114962766,         15.2888998907473
     167,         -61.510045298147,          346.27773636639,         12.2454309054862
     168,         66.1947237263409,         285.294406651656,        -17.8005267734642
     169,         145.089121840936,        -101.589988869424,        -20.6863700177923
     170,         67.8123269322386,         107.831518029716,        -70.1280351095498
     171,        -228.526569002553,          25.187108592683,         20.7449145376426
     172,         116.192909208682,        -135.714768306219,        -5.22765274868703
     173,        -25.7214500502317,         24.4457817759578,        -32.0401632627659
     174,        -99.2656912702442,        -95.9713042154775,         21.8984118531916
     175,        -225.404291973172,         165.030067559811,        -14.6145380421609
     176,        -148.056063919354,         200.392832477294,          51.732386644805
     177,        -231.743066871419,          48.616718366098,        -42.7110679842118
     178,        -273.838818480186,        -141.804210506754,        -33.4066317982071
     179,          225.66047766882,         70.7855476130664,        -22.4651413655212
     180,         161.624014940869,        -155.410151730483,         35.5375095622323
     181,         249.886869747139,         -29.570804513791,          4.4545766927556
     182,         78.7277583464644,         69.1003489122262,         20.4527762031428
     183,         -261.65858826491,          21.083342597393,                        0
     184,          14.265770207283,         125.444232661484,        -71.7910734916996
     185,        -71.1274878266861,         12.8747228118008,        -23.8274322263093
     186,         118.383299454294,        -84.3623801015142,          8.8537266155955
     187,        -11.5332850811692,         19.9583553932413,        -75.3558973704259
     188,        -120.866488395662,         5.48051979368577,         15.0419714912036
     189,        -136.817112803374,         110.071881324552,        -6.59783464418623
     190,        -149.513761871268,         99.4329690232095,         10.2627671837168
     191,        -191.150529284566,        -6.26767097519136,         14.0303812842026
     192,        -87.7315318667011,        -4.16190190341412,         52.9181920229076
     193,         -33.452184614936,         52.4152214417305,         49.2541748374953
     194,         105.409038448897,         20.0450416468294,        -74.7166718145444
     195,        -72.3199838811159,        -169.660893868963,        -28.1500982298283
     196,         5.14727963839997,        -57.8981891050461,        -28.2055017949108
     197,          15.009408809249,         90.8829155987515,         4.40228846781062
     198,        -15.5550528688147,         6.86027296206927,        -16.6779986339053
     199,         129.220956226448,          28.210468607587,         5.52483696794363
     200,        -5.50573877315304,         49.1945833671813,         13.0844709407932
     201,        -71.2325198115932,        -30.4061860476649,         5.32725952161814
     202,         6.79944859342624,          322.56500394203,        -52.1401775079501
     203,        -109.589510371717,         103.309955475531,         86.0638607656881
     204,        -89.6084051698485,         81.5581909970186,         -45.396253348047
     205,         152.562652368361,         50.6641151614786,          15.266574046233
     206,        -492.076486992685,         -88.629489763933,        -13.5667788402954
     207,         277.146957885077,         47.1562461476569,         3.70328634777259
     208,        -198.547404042234,      -0.0498237731167226,         27.0231221742104
     209,         372.080962843765,         -73.045542383122,        -72.8000684007071
     210,         77.6821136370684,        -35.5362733875105,         1.49657744983983
     211,        -14.7221060659374,        -131.123209293523,         21.1156433746757
     212,         296.940074627725,        -71.0489291060012,         9.87426391331212
     213,        -32.1344919978336,        -90.1197067117876,         9.83614305538877
     214,         -67.663161666907,         22.5775660167344,        -1.51273118123074
     215,        -204.288872733381,          17.982416262842,         43.0029359995401
     216,        -196.036051725986,        -74.6646230493973,        -58.2876414890809
     217,        -246.890206703399,         28.5784749186498,        -30.3119915650748
     218,        -145.234465912559,        -128.398525508306,        -17.6829909056812
     219,         87.1645146353005,          233.45214040645,        -73.5307399428127
     220,         4.23966370161607,         155.888235963829,         16.5418095358376
     221,        -124.607668194271,         78.3975544750679,        -8.56655585000597
     222,        -3.13625950745133,         43.7668450659918,       -0.973367721295621
     223,         32.2397234031184,         34.8991615278177,        -83.5490602881411
     224,        -94.3852865851416,         25.6150177082117,        -43.5361242823005
     225,         103.386966248689,         3.07728065600492,         6.88626466267103
     226,        -29.1126639531519,         95.8540932400404,         7.30200210553687
     227,        -21.8004802706654,          -50.34765162242,         1.89897072822739
     228,        -49.7659938194631,         166.544984310188,        -47.6564187033365
     229,        -178.484001128694,        -137.351016466204,         33.2976071184024
     230,        -302.787106476159,         70.7455030417747,        -2.96258765783281
     231,         386.474211865326,        -87.3222065662603,         35.9272459623996
     232,        -49.0446501136965,         78.3785607816552,        0.980282672206071
     233,         28.9216507314339,          38.641499537342,        -19.6705212931477
     234,         61.3564972911759,        -100.921267219317,        -31.7451410962945
     235,          -186.3865533119,        -21.8319969991371,        -2.21705176505123
     236,         -24.745559606117,         24.6904143005099,         58.4431794557921
     237,         326.559394677896,         89.4562442290859,        -13.9794122888611
     238,         -156.60156535199,         3.21829270255672,        -42.7898417677683
     239,         307.116388761027,         24.3984051348634,        -2.20847905204095
     240,        -134.596444666198,         168.000150281936,         15.0249495566939
     241,         -352.17735201734,         185.902460183903,        -26.5364857029805
     242,        -54.5678480679951,        -5.60671868995145,        -7.22709395327936
     243,         50.0692263315754,         31.5393794079029,        -6.83516678718625
     244,         7.18126564527921,        -33.2944473416053,        -11.1673494773765
     245,         100.641107997224,         112.875636303739,        -48.1691585658906
     246,         122.062181058369,        -23.6529455276453,         -25.267468496816
     247,         306.389898360888,        -14.6193818364383,          16.988097860938
     248,         -29.215496793024,        -38.6744631075647,         57.6918655716311
     249,        -73.4052744896176,         29.1848513564024,         51.9369261124809
     250,        -90.4948914379323,         44.5671071189303,          21.269880101676
     251,         196.592311701548,         7.87807550834402,         10.7715115965211
     252,         -61.001085794997,        -16.7228677448457,        -54.2043938870562
     253,        -30.8909795483998,         20.0490467157443,         -9.2662850624259
     254,        -120.441672764924,        -82.8340624695802,        -19.7069622016079
     255,         237.301855714667,        -3.18379617258152,         51.5399602593574
     256,         248.189465025994,         227.364701695444,         7.83975170312438
     257,        -105.489211529721,        -4.72894094080149,         8.43231363521531
     258,         29.3145404208054,          8.5268853500145,         16.9256684598167
     259,        -233.336674032424,         -25.577353176464,        -24.4555503839886
     260,        -377.861885203916,         43.5184233228296,         1.30757558220419
     261,         259.422883800893,         64.4246066689606,        -15.3721657853444
     262,        -190.876202134824,         215.616655901827,        -37.2376111840073
     263,         92.0788707156102,        -145.696280969165,        -78.0864794985794
     264,        -8.92746680831884,        -86.3127184646729,         -3.6133015628966
     265,         17.9017683723484,         49.7035304185485,         51.8895765612319
     266,          59.651516375901,         44.7201608399489,        -30.7748789907316
     267,         61.9852104647947,         39.6868734833258,         22.7903334483459
     268,         57.7296240877964,         37.1489316039481,        -37.6578235540808
     269,        -75.6684389285131,         270.343630036499,         5.89125220845046
     270,         338.361197763291,         35.6902987303633,         71.9458727161148
     271,        -277.236857446487,         25.0331756216628,         6.00809032936026
     272,        -274.493985033358,          72.767613485813,          80.925971156883
     273,        -114.766212070718,         225.716283201108,         -47.151619463764
     274,         11.6146739756757,         3.28249860009295,        -35.4708209468382
     275,         273.033750044663,         43.2790331236455,        -5.62042410328073
     276,        -74.3994280390439,        -3.80602831663845,        -28.9143414371248
     277,         80.4200226629246,         73.1746573621289,        -22.2878743998184
     278,          8.8549151992681,         2.85366597671698,         19.1561983549763
     279,        -68.8169200177383,         152.774372437398,          59.222138086903
     280,        -48.7138169634686,         24.9500301284483,        -11.1733473162974
     281,         51.4945338868976,        -11.5080687596966,         49.3737650939141
     282,         21.2572939830168,        -31.8942552832394,        -49.0503070601496
     283,        -65.5477101521323,         209.572705725475,         5.86180605500089
     284,        -212.217921373536,        -24.0156451966686,        -48.0599880740326
     285,         49.0833120602571,         34.8746003442791,         24.5412962495076
     286,         385.787185811339,         248.063585144497,         41.2964839196282
     287,         -113.63333266677,        -116.488099734526,        -34.2477261481098
     288,         -15.312493323494,          188.52279494634,        -5.61084230179472
     289,        -231.479775976147,         44.2073355299455,         20.1191004496622
     290,         123.385093130351,         145.672572770003,         25.0988239343738
     291,        -193.191038819585,         24.3291879609829,        -8.89777097287484
     292,         188.688841973752,          3.2853820553447,         1.89188307891222
     293,        -189.090945575894,         63.1951340060658,        -88.1822647285565
     294,          197.04226020679,        -74.1274971860123,        -5.81523622284422
     295,        -375.607360692512,        -45.6783600136071,         35.7672534108941
     296,         204.978310212948,         61.5383399587769,         42.3215534967936
     297,        -169.135831593599,         48.6512112471514,        -99.6143632100962
     298,          -236.0716383234,        -94.5377057485924,        -15.9730855822438
     299,         188.333138163822,        -2.03070453788652,        -30.4173602771095
     300,        -42.8996460339518,        -26.8282144352925,        -7.92874261547287
     301,        -110.010429387917,          110.15717998294,        -6.69519832669534
     302,         65.7678887759186,         163.531832074528,        -24.3087564363651
     303,        -85.9402204574739,         38.7842649923564,         9.66984343420241
     304,        -221.452290971974,         180.709720926224,        -16.4779496940216
     305,         -118.00772739109,          7.7521423617155,         34.0597517350967
     306,         121.036499117052,        -2.34011231378657,         40.7173864770296
     307,        -16.1232459406011,         199.395709601881,          45.108581972359
     308,        -5.39033310645741,        -82.9957335167545,        -15.8164181037882
     309,         124.846664206053,         38.6580337573113,          -41.63185500383
     310,         165.504925356016,        -1.23226079495263,         62.9153496874102
     311,         105.440676980857,         6.70867223930949,        -21.7430293302718
     312,        -103.748547628405,         26.6858594728102,         19.5860590057383
     313,           7.032896628153,         195.358475243374,        -1.34251019234886
     314,        -23.3511143342364,          326.11233879631,         2.73339923924459
     315,        -181.321439667289,         50.0050169443735,        -45.5090786849657
     316,        -123.349661282892,         53.4626051045314,        -11.3396918733323
     317,        -82.7764932023252,        -114.057440189206,         2.60825565206271
     318,         187.285315683244,        -5.99655693210501,        -2.59379682438159
     319,        -18.9433764051382,          40.543623273514,         24.5969753175028
     320,         348.266916319852,        -103.614347001358,         27.5037112564331
     321,         131.307080251308,        -87.4864321413852,        -32.1600427069515
     322,         307.208552620471,         177.260266720439,        0.326868385228733
     323,         200.670589144188,        -1.81233862219953,         9.66294283124755
     324,         64.2771133670011,        -14.5968637692727,        -3.78962112953403
     325,         13.1504913350337,         177.727185875516,           32.79298764737
     326,        -239.440631542094,          97.521914371998,          -46.69258005018
     327,          349.76425216336,         24.1571471803622,        -50.1156985452937
     328,        -198.872466407191,         80.3116088068632,        -18.4097676511899
     329,        -7.84099573634611,         235.025879738864,         35.2616962023367
     330,        -56.7641134721991,          31.140672913818,        -32.0876452778874
     331,         12.9049970269692,         141.291102283304,        -21.8715149079782
     332,        -15.2061703038431,        -40.1105480273769,        -89.4861858568556
     333,         13.8831452400811,         -99.297312505216,         -18.249295343761
     334,         37.6282411425506,         175.463417052973,        -16.6289746428975
     335,           41.10283115185,          310.07954378616,         1.57131257772972
     336,        -198.760693226364,         88.2082858263554,         -63.430370731014
     337,         202.815111667297,        -21.7405771472215,        -4.37639262032527
     338,        -400.058317463872,        -153.887179176271,        -35.7528105777469
     339,         26.0057466551688,          79.999770734459,         10.5116745296454
     340,         38.8024252763961,         23.5690983326962,         8.28764845071717
     341,         229.521132449396,         12.3868331659524,        -22.5516635410263
     342,        -35.6142985455758,          36.666256560323,         40.3297834966005
     343,        -307.572067565085,        -5.46344190019343,        -8.07181623953945
     344,         265.920936381408,         66.7439369045868,        -1.77620749071995
     345,        -231.491041876139,        -5.21642581709494,         0.36071092279661
     346,        -205.440924710334,        -22.2433059067667,         29.7078864275049
     347,        -8.08088332185563,         177.649856585846,       -0.453275218817068
     348,          140.39181984048,         47.9665726041266,        -52.3529431467657
     349,        -98.3834345873368,         65.4013942784636,        -31.9108777888636
     350,        -216.700180448918,        -89.1734757987659,         13.2969887686414
     351,         -85.601770506055,         160.974442661262,         15.9671627767231
     352,         2.65662311141222,        -9.12216502945971,         29.7542364242274
     353,         14.3460881776857,         72.9909731042529,        -25.0042204572839
     354,        -34.5640131191183,         137.490848851153,          19.388098679198
     355,        -75.2372953906829,         2.06973826096847,         68.0169029841278
     356,         236.393005876519,        -42.8009738734928,        -1.34544846711003
     357,        -2.31551029920369,         43.6670220106221,         2.27781413229081
     358,        -18.7905346852683,         109.738170342864,         8.36150043847109
     359,        -51.4786053157778,         4.70854848190609,        -62.6222674961306
     360,        -93.9478339990358,         7.45227098811989,        -1.41614989257238
     361,         117.397466296981,        -42.0771853854308,        -10.0335417580947
     362,        -11.5662214306957,         60.8623449517704,          4.2601601352264
     363,        -1.84100202556746,         -63.189614387783,        -40.4343438709315
     364,           18.85836921486,        -21.2228596234801,         40.6209200623543
     365,         -29.413746477763,         23.5123765983211,        -42.0972886831021
     366,         2.73907723265657,          73.257297771637,         7.84187442988245
     367,         364.908909966661,         183.140940562888,        -50.7549994693859
     368,          29.997491519897,         12.6060235782554,         3.69540440276983
     369,         77.8858490688195,         22.4349779800675,        -6.59559697592426
     370,         280.748592153074,         54.0079449648075,         50.2589218873805
     371,          274.49998403457,         256.836975299212,         16.6478593426979
     372,         228.066714277522,          39.264236542985,         11.3278232772499
     373,         192.193788832144,         166.127385341622,         23.9096694755879
     374,         136.380755431196,        -52.5175955162931,         30.1301039117994
     375,        -153.156102724912,         116.354993787759,         4.74768820672654
     376,         112.974605828977,        -46.2099388754973,         22.7694571142874
     377,         217.654428904715,        -48.0669315406433,        -25.1150475019193
     378,         142.356930825094,         88.3035102474054,         -5.2207750553362
     379,        -100.425798254286,        -126.132822199786,         26.8764412155731
     380,        -12.4115607409792,        -30.4975651393168,         30.5525423784519
     381,        -62.5040312132351,          32.042114090194,         53.5909978363621
     382,        -173.915375754663,        -72.7725978571794,        0.758051529879706
     383,         62.1445942111987,        -59.1110262135561,         32.1622293219726
     384,         290.658448087358,         178.553862610158,        -4.00579343783008
     385,         104.173298616043,         53.9822329757652,         17.7777580464155
     386,         -142.00561143365,         172.045313227477,        -66.6723679041827
     387,        -52.1073377840721,         6.47443036850282,        -23.6733037678866
     388,        -161.971905727858,         308.273816848301,         37.9068584404452
     389,        -4.12282470014078,         36.3894197905387,        -15.6682093961482
     390,         9.80873192185943,        -4.58455526762854,         4.84511005126178
     391,        -259.043327401412,         159.398828958813,        -27.8243785467112
     392,        -198.173141884698,        -12.3287161478441,        -33.1864917479393
     393,        -455.653822829786,        -75.1194443191027,        -18.9779926249655
     394,        -343.357719029932,        -6.23372807644015,        -64.3669438810865
     395,         2.56727574140172,         44.5041981695705,        -19.1499011950334
     396,          91.736488496762,         35.4737450631679,         63.7661608791753
     397,        -86.6110541828028,        -21.9860865101153,        0.636772918811428
     398,        -91.1772179851203,         114.211440210329,        -17.5913005776663
     399,        -258.693078630461,         108.887289147306,        -26.5074689143838
     400,        -71.7139665371338,           148.7138492012,        -7.57018065060032
     401,        -78.7217434862264,         198.677190506215,          2.0192065071404
     402,         269.636257669719,        -81.3213192454173,         24.0121688735728
     403,        -60.2288376843691,        -5.94302066319763,         62.3786152882402
     404,         45.7365529750178,        -46.2187051229266,        -4.56916490875611
     405,         193.119663648829,         11.0915136784741,         52.5239358369838
     406,        -107.832281466961,        -14.5589207534487,         16.7806343821719
     407,        -72.9988124105142,         145.630684817969,        0.534492417487545
     408,        -186.060153119294,         238.171777514821,         7.79894856167908
     409,        -43.1191344573717,        -165.017332479831,        -6.13801978628059
     410,        -46.4328159999255,        -1.29185173255012,        -69.2547912147151
     411,         208.941004734925,        -11.0773237427125,        -12.9903663792603
     412,         179.891623854587,         50.1999196182936,         56.1256771251213
     413,         74.5608725559716,         146.367401066873,        -71.8497339588822
     414,         13.9704973650959,         129.118488789126,         39.0723430482076
     415,          121.20923477747,        -4.08588404212421,         46.9561976189521
     416,         12.0121201556232,        -57.4173440762876,         47.7978776482855
     417,        -33.1696934155979,        -25.7390538280546,        -79.4795335710419
     418,         57.7599889406748,        -32.6719413523897,         6.52032170748353
     419,        -15.7469769095755,        -80.2018076275484,        -1.00004108296709
     420,         171.120881582201,         150.758933777809,         -3.3096912295137
     421,        -146.550886196341,         27.7221924242201,         54.9550412273756
     422,        -3.88820216240743,         6.16666348891643,         16.7651327581914
     423,          19.864449775249,        -1.52066570963742,         71.7951855807543
     424,        -63.2391570639979,                        0,         9.26969987492529
     425,        -6.84288097258791,          60.056975819197,         39.6068951485711
     426,         282.527002483852,         84.3393508625866,        -15.8147000772016
     427,         187.141245491868,         160.160648848005,        -80.5037517149485
     428,         125.391345911842,          9.3903528011359,          11.177866920446
     429,        -477.149597726366,         78.2261330020736,        -48.0720918467604
     430,         57.2779820939889,        -46.6522359636855,         18.2525714013039
     431,         67.0631146822419,        -138.063670289732,         84.1318959594387
     432,           194.5550931406,         197.516722622102,        -27.5168252887748
     433,        -454.631799845785,         34.3361823439301,        -46.9452710104851
     434,         168.975313163351,        -11.9923086930031,         -59.197338303643
     435,         448.603983610218,         69.2573477184667,      0.00756317749971672
     436,         -120.62034751364,          74.583169158354,        0.897665073581815
     437,         251.384357684937,         119.882789002677,          -38.06913454927
     438,        -70.3986684891389,         37.1786633865808,         10.9374439976818
     439,        -95.7610326263872,        -16.7222922121744,        -4.64387059241714
     440,        -22.4673061019123,         40.5550553205214,        0.501477322774696
     441,        -164.426287687582,         264.115487583035,        -16.3096281282183
     442,        0.771483268948031,          30.688847903483,         12.7637705266307
     443,          -2.234900710748,         7.17591603806984,         -24.130715956041
     444,        -310.043540636563,         -68.061365915491,         -11.590234954185
     445,         94.1981775249346,        -66.3663560894161,          16.346231560384
     446,         304.239649882186,         170.271520102989,         15.2719258900135
     447,         21.7719494466539,        -55.4052874536278,         2.70999502516817
     448,         110.876635297144,         84.8732943110509,         12.2066624430971
     449,         186.919196815658,         41.3792803191483,         12.2749409243813
     450,         288.325037448818,        -19.8949891402828,          12.622938131738
     451,        -91.7083304471841,         64.8757723126913,         26.4732169688089
     452,         82.9720939774868,         7.17160985580255,        -28.6344866615881
     453,         273.873314947762,        -83.9858569521391,          42.971088354928
     454,         72.7500460570446,         84.6837837950717,         17.6529748149463
     455,        -125.449709720188,         153.519017898254,         32.9806146318934
     456,        -313.742000534545,         95.7445107664655,         59.2664635941696
     457,        -172.443614969702,         207.197073061111,         77.3894456491756
     458,        -473.069812968871,        -98.8206745408572,        -5.83457643437878
     459,         382.338795012952,         179.904425702013,          39.625133120746
     460,         77.9050275259209,        -97.8483933288829,         56.5909400920341
     461,        -228.078144616018,        -42.0892528994425,         16.7694015301622
     462,        -114.392832344115,         151.898339161602,         17.0722867185587
     463,         8.19490807885067,         36.6421827602397,         46.5681522104741
     464,        -131.066129936402,         52.2459703275217,         46.7073200488031
     465,         327.111862402461,        -8.40222312621876,        -16.7800409937184
     466,          106.60489315009,         10.9465424106207,          -1.770412686174
     467,         90.3100452061324,        -46.6203947903683,         5.85683352027872
     468,        -152.841190262158,        -109.476896184253,         24.7525306422042
     469,        -413.521089378521,         68.7974493288423,        -2.37952903955222
     470,         -118.30671464247,        -64.3264487182379,        -1.11225314536703
     471,        -59.6539588340809,         159.530970921522,          13.310867030784
     472,         69.0215806220759,         49.3076332320029,         -17.449944837694
     473,         25.4704727015786,         44.8575381957262,        -8.32304082034297
     474,         67.1351660728153,        -33.7233499445596,         28.5401688453463
     475,         -5.6858425883976,        -32.5274830612016,         34.2197275181393
     476,         -119.50879910286,         -17.547928243665,        -1.82897426971652
     477,         33.5815168845381,         189.039743295889,        -66.4091609089678
     478,        -157.659741998492,          188.12139708601,         4.64530784154558
     479,         29.4524025672359,        -17.3525364596176,         3.50503274030286
     480,        -65.4726929634217,          -2.369850588669,        -19.6609740795852
     481,         -109.06284366225,        -126.958402171246,        -34.0425585997489
     482,        -190.423743381362,         160.038652709703,         19.2391742734421
     483,         43.5431898159642,        -13.5881859872435,         21.3152501356393
     484,        -76.1208107155379,         222.273643694014,       -0.585669212316009
     485,        -18.0787910758885,         10.7635130247863,        -24.2171928515738
     486,         37.8016652007595,         4.16770227540643,         9.26371389453472
     487,         96.7763665787766,         4.25517264858595,         5.54292480765978
     488,        -49.9232681886867,         49.3528080030125,         -44.541192967231
     489,         318.925490065909,        -3.42941250066711,        -26.0956883514746
     490,         12.3293758357546,         157.641535593961,      -0.0405716896246056
     491,         -269.87523931911,        -25.8587086693657,          8.9861542852531
     492,        -2.18949024481209,         3.58279508705381,        -3.28229936737674
     493,         111.777659404919,        -17.9583007986463,         12.2681326662508
     494,        -427.576565925766,        -126.903077662412,        -15.9471322553917
     495,        -370.227558929579,        -11.9607869814899,          24.450766022527
     496,         73.3651729195217,        -85.3723384995816,         48.7593361459483
     497,        -322.221605443499,         150.809171391562,         12.1728172317021
     498,        -37.1946292050158,         21.1561563928407,        -40.9404879626541
     499,        -41.1623030636284,         76.1979822331099,        -4.98371177026243
     500,         164.014527419589,         222.003222492525,        -1.45161862925236
図2 図



コメント

乱数で簡単に作ったので立方体内にまばらに点が配置されました。

少し追加すれば、偏りなどを意図的に入れたり、好きな形の中に点を配置したりする事も出来そうです。

ニーズがありそうならやろうかなと思います。



以上

C# で ASCII 文字列をソートすると良いことがありそうか確認した



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


テキストを行単位で配列に格納して、 for ループで配列を検索していると、どうしても大容量データだと時間がかかります。

使える時は限定的になりますが、ソートを活用して検索したい配列をひとかたまりにしてしまえば、処理の時間が削減できる気がしたので、とりあえず、 ASCII 文字列をソートした時の並び順を確認することにしました。



動作環境


Windows 7
Visual Studio 2017



プログラム

ASCII 文字列を昇順と降順にソートして、ファイルに出力する C#ソースコードを書きました。

ソースコード


using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Sort_ASCII
{
    class Program
    {
        static void Main(string[] args)
        {
            // 出力用ディレクトリ
            string sDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
 
            // 出力用変数
            string originASCII = "";
            string ascendingASCII = "";
            string descendingASCII = "";
 
            // 印字可能な ASCII 文字列配列作成
            string[] ASCII = new string[] { " ", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~" };
 
            for(int i=0; i < ASCII.Length; i++)
            {
                originASCII += string.Format("{0,3}", ASCII[i]);
            }
 
            // 昇順ソート
            Array.Sort(ASCII);
 
            for (int i = 0; i < ASCII.Length; i++)
            {
                ascendingASCII += string.Format("{0,3}", ASCII[i]);
            }
 
            // 降順ソート
            Array.Reverse(ASCII);
 
            for (int i = 0; i < ASCII.Length; i++)
            {
                descendingASCII += string.Format("{0,3}", ASCII[i]);
            }
 
            // 出力
            File.WriteAllText(sDir + "\\" + "Sort-ASCII.txt", originASCII);
            File.AppendAllText(sDir + "\\" + "Sort-ASCII.txt", Environment.NewLine);
            File.AppendAllText(sDir + "\\" + "Sort-ASCII.txt", ascendingASCII);
            File.AppendAllText(sDir + "\\" + "Sort-ASCII.txt", Environment.NewLine);
            File.AppendAllText(sDir + "\\" + "Sort-ASCII.txt", descendingASCII);
        }
    }
}



結果

結果は図1 の通りとなりました。
上段、中段、下段の内容はそれぞれ以下の通りです。
上段:初期の並び順
中段:昇順
下段:降順

横長になってしまったので、スクロールできるようにしました。


     !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~
  '  -     !  "  #  $  %  &  (  )  *  ,  .  /  :  ;  ?  @  [  ]  ^  _  `  {  |  }  ~  \  +  <  =  >  0  1  2  3  4  5  6  7  8  9  a  A  b  B  c  C  d  D  e  E  f  F  g  G  h  H  i  I  j  J  k  K  l  L  m  M  n  N  o  O  p  P  q  Q  r  R  s  S  t  T  u  U  v  V  w  W  x  X  y  Y  z  Z
  Z  z  Y  y  X  x  W  w  V  v  U  u  T  t  S  s  R  r  Q  q  P  p  O  o  N  n  M  m  L  l  K  k  J  j  I  i  H  h  G  g  F  f  E  e  D  d  C  c  B  b  A  a  9  8  7  6  5  4  3  2  1  0  >  =  <  +  \  ~  }  |  {  `  _  ^  ]  [  @  ?  ;  :  /  .  ,  *  )  (  &  %  $  #  "  !     -  '
図1 図



コメント

このソースコードを流用することはないと思いますが、 ASCII の昇順、降順で並び順の変わり方が分かりました。

A B C などのアルファベットの並び順はおいといて、 @ や & 、 $ といった文字は覚えておいても良いでしょう。

決まった書式で書かれた文字列配列から、先頭が @ から始まる文字列だけを抽出する場合などはソートしてから検索して、 @ が検出されなくなったら、ループ脱出すれば、無駄なループを待つ必要がなくなります。

ただし、ファイル入力時間、ソート時間を考慮すると意味が無いかもしれません。



以上

【簡単一発コピペ】VBA でフォルダが無ければ作成するサブルーチンを作成する



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


VBA で何かアプリケーションを作ると新しくフォルダを作って、その新しいフォルダにファイルを保存したくなる事がいっぱいあります。

しかも、何故かいつもソースコードを忘れてしまっていて、いつもいつもインターネットを徘徊して調べています。

なので、簡単にですが、記事に残しておくことにしました。



動作環境


Windows 7
Excel 2010



プログラム

サブルーチン


Sub フォルダ作成(ByVal SaveDir)
    
    ' Path に使えない文字の配列作成
    使用不可 = Array(¥, /, ", <, >, ?, [, ], :, |, *)
    
    ' Path に使えない文字の代替文字
    代替文字 = "-"
    
    ' Path に使えない文字の置換
    For i = LBound(使用不可) To UBound(使用不可)
        If InStr(SaveDir, 使用不可(i)) > 0 Then
            SaveDir = Replace(SaveDir, 使用不可(i), 代替文字)
        End If
    Next i
    
    ' SaveDir フォルダがなければ作成する
    ' SaveDir の中身は ex) みたいな感じです
    ' ex) SaveDir = "C:\Data\Sample"
    ' 最後に「 \ 」は付けない
    If Dir(SaveDir, vbDirectory) = "" Then
        MkDir SaveDir
    End If
    
End Sub



使い方

今回は VBA が書かれている Excel ファイルと同じフォルダの中に大量にフォルダを作る VBA を例に使い方を整理しておきます。

図1 の様にExcel ファイルの A 列に作成したいフォルダ名を入力します。


図1 作成フォルダ設定


そして、 VBE に標準モジュールを追加して、下記の Excel VBA を貼り付けます。

ちなみに、 VBE は [Alt] + [F11] を押すと起動ます。

また、標準モジュールは VBE がアクティブな時に [Alt] → [I] → [M] の順で押すと追加できます。

Excel VBA


Sub Sample()
    
    While Cells(i, "A").Value <> ""
        
        sDir = Thisworkbook.Path & "¥" & Cells(i, "A").Value
        
        Call フォルダ作成(sDir)
        
    Wend
    
End Sub

Sub フォルダ作成(ByVal SaveDir)
    
    使用不可 = Array(¥, /, ", <, >, ?, [, ], :, |, *)
    代替文字 = "-"
    For i = LBound(使用不可) To UBound(使用不可)
        If InStr(SaveDir, 使用不可(i)) > 0 Then
            SaveDir = Replace(SaveDir, 使用不可(i), 代替文字)
        End If
    Next i
    
    If Dir(SaveDir, vbDirectory) = "" Then
        MkDir SaveDir
    End If
    
End Sub


これで、準備は出来ました。
あとは、「Sample」マクロを実行すれば、この Excel ファイルがあるフォルダと同じ場所に Excel ファイルの A 列に書かれたフォルダが量産されます。

マクロの実行は [Alt] + [F8] を押すと選択画面が開きます。
そこで、「Sample」をダブルクリックすれば実行できます。



コメント

忘れたら見に来てください。



以上

winpython(Flask) で Web アプリケーション入門



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


何か Web アプリケーションを作ってみたい気はしていたのですが、アイデアばかりを考えてしまって、サーバー借りたり、セキュリティだったりのめんどくさい事になかなか踏み切らないでいたら、 heroku という PaaS を何でか知り得たので、今後を見据えて、勢いで Web フレームワークの Flask をとりあえずいじってみる。



動作環境


Windows 7
・winpython 3.4.4
・Flask は winpython に同梱されていたものも使用しました。



プログラム

サーバーにアクセスすると、

Hello World !
改行テスト

と表示されるプログラムを作ります。

ソースコード


# Flask のインポート
from flask import Flask
 
# アプリケーションのインスタンス作成
app = Flask(__name__)
 
# アプリケーションのルートにアクセスしたときの処理
@app.route('/')
def hello_world():
    return "Hello World !<br>改行テスト"
 
# __name__ が __main__ だったら
if __name__ == '__main__':
    app.run()



結果

winpython は F5 キーでプログラム実行出来ます。
実行すると以下のようなメッセージが出てきます。
なお、このプログラムは下記メッセージにもあるように Ctrl + C を押すまで実行し続けます。

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

なんでもいいので、IE ブラウザを立ち上げて、 URL の入力欄に http://127.0.0.1:5000/ と入力して自分のパソコンにポート番号 5000 使ってアクセスします。

すると、図1 の様に表示されます。


図1 図 実行画面


Ctrl + C を押して、プログラムの実行を終了する事を忘れずに!!



コメント

レベルとしては Web アプリケーションとはいかないですが、 python で Flask を使ってみることに成功しました。

これを皮切りに Flask で Web アプリケーションを作成して、デプロイ(公開)してみたくなりました。



以上

Python + pyocr で ocr したら高認識率で1桁数字も認識した



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。



この記事の目次



目的


今まで Tesseract を使用して ocr してきました。
この際、 pytesseract という Python から Tesseract を使うためのライブラリを使っていました。

しかし、私のソースコードや操作が悪かったのかもしれませんが、1桁の数字を認識出来ないという問題がありました。

そこで、pyocr という Python から Tesseract を使うためのライブラリを使って ocr してみます。



プログラム

ソースコード


# -*- coding: utf-8 -*-
###############################################################################
# ライブラリインポート
###############################################################################
import os                       # os の情報を扱うライブラリ
from PIL import Image           # 画像処理ライブラリ
import matplotlib.pyplot as plt # データプロット用ライブラリ
import numpy as np              # データ分析用ライブラリ
import pyocr                    # OCR ラッパーライブラリ 対応OCR:Tesseract, Cuneiform
import pyocr.builders           # OCR ラッパーライブラリ 対応OCR:Tesseract, Cuneiform
import sys                      # 実行環境関連ライブラリ
 
# カレントディレクトリを変更する
os.chdir("C:\\作業\ocr-Preprocessing")
 
Image000 = '000_Const_Image.jpg'
 
tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
 
tool = tools[0]
 
#################### 画像の読み込み ####################
img = Image.open(Image000)
 
txt = tool.image_to_string(
        img,
        lang="eng",
        builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
 
# 画像を配列に変換
im_list = np.array(img)
 
# データプロットライブラリに貼り付け
plt.imshow(im_list)
 
# 表示
plt.show()
 
# 抽出したテキストの出力
print()
print("text ↓")
print(txt)
print()



画像処理の結果

図1 は WinPython の実行画面、図2 は入力画面と認識文字の比較図です。


図1 WinPython の実行画面


図3 入力画面と認識文字の比較図



コメント

今まで1桁の数字の ocr にすごく苦戦していたのですが、あっさり全部正確に認識しました。

今まで Python + pytesseract では全然認識しなかったのに。

出来るときはこんなものですよね。

資料のデータベースを作成する時に数字の読み取りは必須なので、データベース作成プログラムでも作ってみたいです。



以上