[C]リスト構造
久しぶりにC言語復習。
リスト構造。
-- Stack.c --
#include "Stack.h"
#include "List.h"
static List *stList;
void InitList()
{
stList = (List*)malloc(sizeof(List));
}
int Pop()
{
int iReturnValue = stList->value;
Delete(stList);
return iReturnValue;
}
void Push(int iValue)
{
stList = Add(stList, iValue);
}
-- List.c --
#include <stdlib.h>
#include "List.h"
List* Add(List *pstNode, int iValue)
{
List* pstNewNode = (List*)malloc(sizeof(List));
pstNewNode->value = iValue;
pstNewNode->next = pstNode;
pstNode = pstNewNode;
return pstNode;
}
void Delete(List *pstNode)
{
List *pstDeleteNode = pstNode->next;
free(pstNode);
pstNode = pstDeleteNode;
}
-- List.h --
#pragma once
typedef struct LIST_TAG
{
int value;
struct LIST_TAG* next;
}List;
List* Add(List *pstNode, int iValue);
void Delete(List *pstNode);
[Perl]日本語抽出
resxファイルとかから日本語文言を抽出するためにPerlを検討してみた。
ActivePerl 5.10 使用。
もう少し改良する必要があるけど、ある程度取れているのではないかと思う。
use strict;
use utf8;
open IN, "<:encoding(utf8)", "Form1.resx";
open OUT, ">:encoding(utf8)", "Form1out.resx";
while(<IN>)
{
my $match;
if(/<value>(.*)<\/value>/)
{
$match = ${1},"\n";
}
print ;
if($match =~ /\p{Hiragana}+/)
{
print OUT $_;
}
elsif($match =~ /\p{Katakana}+/)
{
print OUT $_;
}
#elsif($match =~ /\p{Punctuation}+/)
#{
# print OUT $_;
#}
elsif($match =~ /\p{Han}+/)
{
print OUT $_;
}
}
close OUT;
close IN;
[ADO]特定の列の重複を除いた行を表示する
特定の列の重複を除いた行を表示する。
データを単純にバインドするだけでは、前回 のようにすべての行データが表示され、重複した
データが存在することになる。
このようなデータから、重複を除いたデータを抽出するためには、DataViewクラスを使用する。
(データベースからのSELECT 文の時点でdistinctを使用してもよいが、抽出条件を変えたい時には
またデータベースにアクセスしないといけなくなるので、トランザクションが増えることになる。
データは必要なときに一気に取得し、キャッシュしたデータの中から抽出操作を行ったほうがよいでしょう。)
string connectionString = "略";
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand("SELECT * FROM Employees", connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
using (DataTable table = new DataTable())
{
table.Locale = CultureInfo.InvariantCulture;
try
{
adapter.Fill(table);
}
catch (SqlException)
{
}
using (DataView view = new DataView(table))
{
comboBox1.DataSource = view.ToTable(true, "City");
comboBox1.DisplayMember = "City";
}
}
DataViewのコンストラクタにDataTableを渡し、ToTable()メソッドの第一引数(distinct)にtrueを設定する。
第二引数に、重複を除く列名を指定すれば、重複が除かれたDataTableが生成される。
それを、コンボボックスにバインドすると、次のような結果となる。
前回 とちがい、London のデータが重複していないことがわかる。