SQLの窓

2018年06月12日


PowerShell( 実質C# )を使用して、ファイルの分割を行う

最初に『OpenFileDialog』でファイルを開くダイアログを表示して、そのファイルを1メガバイト(0x100000) のファイルに分割します。( ここでは、初期フォルダは C:\ )



split_file.ps1

readSize はバッファーに読み取られた合計バイト数で。 要求しただけのバイト数を読み取れなかった場合、この値は要求したバイト数より小さくなります。
$code = @"
using System;
using System.IO;
using System.Windows.Forms;
public class MyClass {
	public static void split_file() {


		OpenFileDialog obj = new OpenFileDialog();
		obj.Filter = "全て|*.*";
		obj.InitialDirectory = @"C:\";

		if (obj.ShowDialog() != DialogResult.OK) {
			return;
		}

		// 分割ファイルの拡張子の連番用
		int count = 0;

		// 入力ファイル
		FileStream fsi = new FileStream( obj.FileName, FileMode.Open, FileAccess.Read);

		// オリジナルファイル名
		string FileName = Path.GetFileName(obj.FileName);

		// 1メガバイト
		byte[] buffer = new byte[0x100000];
		// 読み込まれたサイズ
		int readSize;
		while(true) {
			// 読み込み
			readSize = fsi.Read(buffer, 0, buffer.Length);
			if (readSize == 0) {
				break;
			}
			count++;

			// 出力ファイル
			FileStream fso = new FileStream( string.Format("{0}.{1:000}", FileName, count),FileMode.Create,FileAccess.Write);
			fso.Write(buffer, 0, readSize);
			fso.Close();
		}
		fsi.Close();
	}
}
"@

Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("System.Windows.Forms")

[MyClass]::split_file()



inter_active.bat
echo off

echo 処理を開始しました

powershell -NoProfile -ExecutionPolicy Unrestricted .\split_file.ps1
実行すると、拡張子が オリジナルファイル名.001、オリジナルファイル名.002 というように連番で分割して作成されます。 結合は、copy コマンドを使用して行う事ができます
copy /b オリジナルファイル名.001 + オリジナルファイル名.002 オリジナルファイル名
関連する記事 PowerShell : ファイルを開くダイアログを使うのに System.Windows.Forms を参照する二つの方法 PowerShell( 実質C# )を使用して、MessageBox の応答でバッチファイルの処理を変化させる
posted by lightbox at 2018-06-12 00:00 | PowerShell + C# | このブログの読者になる | 更新情報をチェックする

2018年06月09日


PowerShell( 実質C# )を使用して、MessageBox の応答でバッチファイルの処理を変化させる

PowerShell は、C# のコードをそのまま実行する事ができるので、MesaageBox を表示させて、そまの応答結果をファイルに書き込んで、バッチファイル内の for で読み込み、内容によって実行先を変化させます

console_message_box.ps1
$code = @"
using System;
using System.IO;
using System.Windows.Forms;
public class MyClass {
	public static void console_message_box() {

		string path = Environment.GetEnvironmentVariable("temp");

		string writePath = string.Format(@"{0}\_check_result",path);

		StreamWriter sw = new StreamWriter(writePath,false);

		DialogResult check = MessageBox.Show("実行しますか?","確認", MessageBoxButtons.OKCancel);
		if (check == DialogResult.OK)
		{
			sw.Write("1");
		}
		else
		{
			sw.Write("0");
		}

		sw.Close();

	}
}
"@

Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("System.Windows.Forms")

[MyClass]::console_message_box()



inter_active.bat
echo off

echo 処理を開始しました

powershell -NoProfile -ExecutionPolicy Unrestricted .\console_message_box.ps1

FOR /F %%i IN (%temp%\_check_result) DO (
	if "%%i"=="1" goto :ok
	if "%%i"=="0" goto :cancel
)

:ok
echo OK を選択しました
goto :end

:cancel
echo Cancel を選択しました
goto :end


:end


関連する記事

PowerShell : ファイルを開くダイアログを使うのに System.Windows.Forms を参照する二つの方法

バッチファイル内で、コマンドプロンプトが管理者権限で実行されているかのチェック






posted by lightbox at 2018-06-09 23:05 | PowerShell + C# | このブログの読者になる | 更新情報をチェックする

2018年05月22日


PowerShell で C# のソースコード(get_rec_mysql.cs) を使用して System.Data.Odbc で MySQL のデータを一覧表示( csv )

▼ ps.bat : このバッチファイルがある場所にパスを通しています
@powershell -NoProfile -ExecutionPolicy Unrestricted "./%1.ps1"
PowerShell で System.Data.Odbc を使用して MySQL のデータを一覧表示( csv ) では、PowerShell の記述で処理しましたが、特異な環境や目的でも無いかぎり、C# のコードを直接使用したほうが、流用しやすくコストが安く済みます。 get_rec_mysql.cs は、一般的な using を使用した単純なデータベースの行の取得です。このコードを PowerShell で実行するには以下の3行で可能です。
Add-Type -path "get_rec_mysql.cs" `
	-ReferencedAssemblies System.Windows.Forms, System.Data
[Program]::Start()
get_rec_mysql.cs
using System;
using System.Data.Odbc;
using System.Windows.Forms;

public class Program
{
	public static void Start()
	{

		loadMySql();

		Console.WriteLine( "処理が終了しました" );

		MessageBox.Show("処理が終了しました");

	}

	public static void loadMySql() {

		using (OdbcConnection myCon = new OdbcConnection())
		using (OdbcCommand myCommand = new OdbcCommand())
		{
			// 新しい OdbcConnectionStringBuilder オブジェクトを作成
			OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();

			// ドライバ文字列をセット ( 波型括弧{} は必要ありません )
			// 文字列を正確に取得するには、レジストリ : HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
			builder.Driver = "MySQL ODBC 5.3 Unicode Driver";

			// 接続用のパラメータを追加
			builder.Add("SERVER", "localhost");
			builder.Add("DATABASE", "lightbox");
			builder.Add("UID", "root");
			builder.Add("PWD", "");

			// 内容を確認
			Console.WriteLine(builder.ConnectionString);

			myCon.ConnectionString = builder.ConnectionString;

			// *********************
			// 接続
			// *********************
			try
			{
				// 接続文字列を使用して接続
				myCon.Open();
				// コマンドオブジェクトに接続をセット
				myCommand.Connection = myCon;
				// コマンドを通常 SQL用に変更
				myCommand.CommandType = System.Data.CommandType.Text;
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message);
				return;
			}

			// *********************
			// 実行 SQL
			// *********************
			myCommand.CommandText = "select * from 社員マスタ";

			// *********************
			// レコードセット取得
			// *********************
			try 
			{
				using (OdbcDataReader myReader = myCommand.ExecuteReader())
				{
					string csv_format = "{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}";
					string out_line = "";

					while( myReader.Read() ) {

						out_line = string.Format(csv_format,
							myReader.GetValue(0).ToString(),
							myReader.GetValue(1).ToString(),
							myReader.GetValue(2).ToString(),
							myReader.GetValue(3).ToString(),
							myReader.GetValue(4).ToString(),
							myReader.GetValue(5).ToString(),
							myReader.GetValue(6).ToString(),
							myReader.GetValue(7).ToString(),
							myReader.GetValue(8).ToString(),
							myReader.GetValue(9).ToString(),
							myReader.GetValue(10).ToString()
						);

						Console.WriteLine( out_line );

					}
					// リーダを使い終わったので閉じる
					myReader.Close();
				}
			}
			catch (Exception ex)
			{
				myCon.Close();
				MessageBox.Show(ex.Message);
				return;
			}

			// 接続解除
			myCon.Close();
 

		}
	}

}




posted by lightbox at 2018-05-22 19:57 | PowerShell + C# | このブログの読者になる | 更新情報をチェックする
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 終わり