「String」を含む日記 RSS

はてなキーワード: Stringとは

2007-04-13

ASPファイル受信

'/** Requestオブジェクトから受信したデータを取り出します。
' * @return byte配列を格納した連想配列を返します。
' */
Function getRequestItem()

  If Request.TotalBytes <= 0 Then
    getRequestItem = Null
    Exit Function
  End If

  Dim data
  Dim separator
  Dim dataArray
  Dim buffer
  Dim filePath
  Dim fileName
  Dim ix
  Dim stringIndex
  Dim myCrLf
  Dim items
  Dim itemName

  myCrLf = convertAsc(vbCrLf)
  Set items = Server.CreateObject("Scripting.Dictionary")

  data = Request.BinaryRead(Request.TotalBytes)
  data = LeftB(data, UBound(data) - 3) & myCrLf

  separator = MidB(data, 1, InStrB(1, data, myCrLf) + 1)

  dataArray = SplitB(data, separator)

  For ix = 2 To UBound(dataArray) Step 1
   '1行読み込み
    buffer = MidB(dataArray(ix), 1, InStrB(1, dataArray(ix), myCrLf) - 1)

   'アイテム名の取得
    stringIndex = InStrB(1, buffer, convertAsc("name="))
    If stringIndex > 0 Then
      itemName = convertUnicode(MidB(buffer, stringIndex + 6, InStrB(stringIndex, buffer, ChrB(34)) - stringIndex))
     Else
      itemName = ""
    End If

   'ファイル名の取得
    stringIndex = InStrB(1, buffer, convertAsc("filename="))
    If stringIndex > 0 Then
      filePath = MidB(buffer, stringIndex + 10, InStrB(stringIndex, buffer, ChrB(34)) - stringIndex)
      fileName = RightB(filePath, LenB(filePath) - LastInStrB(0, filePath, convertAsc("\")))
     Else
      fileName = ""
    End If

   'データ部の取得、改行コードの切り捨て
    buffer = RightB(dataArray(ix), LenB(dataArray(ix)) - InStrB(1, dataArray(ix), myCrLf & myCrLf) - 3)
    buffer = LeftB(buffer, LenB(buffer) - 2)

    items.Item(itemName) = parseBytes(buffer)
  Next

  Set getRequestItem = items
  Set items = Nothing

End Function

'/** 文字列の最後尾から指定文字を検索します。
' * @param Start 検索する開始文字位置を指定します。
' * @param String1 検索対象の文字列を指定します。
' * @param String2 検索する文字列を指定します。
' */
Function LastInStrB(ByRef Start, ByRef String1, ByRef String2)

  Dim ix
  Dim lastIndex
  Dim searchLength

  searchLength = LenB(String2)
  lastIndex = LenB(String1) - searchLength + 1
  If Start > 0 And Start < lastIndex Then
    lastIndex = Start
  End If
  For ix = lastIndex To 1 Step -1
    If MidB(String1, ix, searchLength) = String2 Then
      LastInStrB = ix
      Exit Function
    End If
  Next

  LastInStrB = 0

End Function

'/** アスキー文字列に変換します。
' * @param String 対象の文字列を指定します。
' */
Function convertAsc(Byref String)

  Dim ix
  Dim ascii

  ascii = ""
  For ix = 1 To Len(String) Step 1
    ascii = ascii & ChrB(AscB(Mid(String, ix, 1)))
  Next

  convertAsc = ascii

End Function

'/** Unicode文字列に変換します。
' * @param AscString 対象のアスキー文字列を指定します。
' */
Function convertUnicode(Byref AscString)

  Dim ix
  Dim unicode

  unicode = ""
  For ix = 1 To LenB(AscString) Step 1
    unicode = unicode & Chr(AscB(MidB(AscString, ix, 1)))
  Next

  convertUnicode = unicode

End Function

'/** バイナリ対応版Split関数です。
' * @param String 対象の文字列を指定します。
' * @param Delimiter 区切り文字を指定します。
' */
Function SplitB(Byref String, Byref Delimiter)

  Dim ix
  Dim lastIndex
  Dim searchLength
  Dim start
  Dim datas()
  Dim dataIndex

  dataIndex = 1
  start = 1
  delimiterLength = LenB(Delimiter)
  lastIndex = LenB(String) - delimiterLength + 1

 '最初から1文字ずつ繰り返します。
  For ix = 1 To lastIndex Step 1
   'データを比較します。
    If MidB(String, ix, delimiterLength) = Delimiter Then
     'データを取り出せたら配列に格納します。
      ReDim Preserve datas(dataIndex)
      datas(dataIndex) = MidB(String, start, ix - start)
      dataIndex = dataIndex + 1
      start = ix + delimiterLength
    End If
  Next

  SplitB = datas

End Function

'/** Byte配列を返す関数です。
' * @param data 対象のデータを指定します。
' */
Function parseBytes(Byref data)

  Const adLongVarBinary = 205
  Dim recordset

  If LenB(data) <= 0 Then
    parseBytes = CByte(0)
    Exit Function
  End If

  Set recordset = Server.CreateObject("ADODB.Recordset")
  recordset.Fields.Append "UpLoadBinary", adLongVarBinary, LenB(data)
  recordset.Open
  recordset.AddNew
  recordset.Fields("UpLoadBinary").AppendChunk data
  recordset.Update

  parseBytes = recordset.Fields("UpLoadBinary").Value
  recordset.Close
  Set recordset = Nothing

End Function

2007-01-29

haXeでFlash Lite 2のSharedObjectを使う

MTASCFlash Lite 2のSharedObjectを使う

http://anond.hatelabo.jp/20070118224057

↑に「リスナーを設定する必要があります。」とあるのでhaXeの↓に

(インストールフォルダ)\std\flash\SharedObject.hx

↓を追加する

#if flash
static function addListener(objectName:String, notifyFunction:Dynamic) :Void;
static function removeListener(objectName:String):Void;
#end

サンプルの内容は1でカウントアップ、3でカウントの表示。

でサンプル↓をSharedObjectHaxeRei.hxと名前をつけて保存。

import flash.MovieClip;
import flash.SharedObject;
import flash.Stage;
import flash.Key;

class SharedObjectHaxeRei
{
	static function main ()
	{
		var sor : SharedObjectHaxeRei = new SharedObjectHaxeRei (flash.Lib._root);
	}

	var Prefs : SharedObject;

	public function new (mc: MovieClip)
	{
		mc.createTextField ("tf", mc.getNextHighestDepth () , 0, 0, Stage.width, Stage.height);
		mc.tf.text = "SharedObjectHaxeRei\r";

		SharedObject.addListener ("Prefs",  loadCompletePrefs );

		// 共有オブジェクトを作成することができる
		Prefs  = SharedObject.getLocal ("Prefs");
		
		//キーリスナーの指定
		Key.addListener (this);
	}
	
	//キーアップイベントの処理
	public function onKeyUp () : Void
	{
		switch (Key.getCode ())
		{
			case 49 ://1 セーブ
			if (Prefs.getSize() == 0)  {
				Prefs.data.count = 0;
			} else {
				Prefs.data.count++;
			}

			case 51 ://3 ロード
				 if (Prefs.getSize() == 0) return;

				flash.Lib._root.tf.text = Prefs.data.count + "\r" + flash.Lib._root.tf.text;
			default :

		}
	}
	
	function loadCompletePrefs (mySO : SharedObject)
	{
		flash.Lib._root.tf.text = "call loadCompletePrefs: " + "\r" + flash.Lib._root.tf.text;
	}
}

コンパイルするにはSharedObjectHaxeRei.hxmlを作成して↓を記述

# SharedObjectHaxeReiのコンパイル用
-swf SharedObjectHaxeRei.swf
-swf-header 240:320:10
-swf-version 7
-main SharedObjectHaxeRei

上記を↓でコンパイルする。

haxe SharedObjectHaxeRei.hxml

2007-01-18

MTASCFlash Lite 2のcapabilities (System.capabilities)を使う

Flash Lite 2.x ActionScript Language Reference > ActionScript classes > capabilities (System.capabilities)

http://livedocs.macromedia.com/flashlite/2/main/00000421.html

Flash Lite 2.x ActionScript リファレンスガイド > ActionScript クラス > capabilities (System.capabilities)

http://livedocs.macromedia.com/flashlite/2_jp/main/00000421.html

MTASCの↓を

(インストールフォルダ)\std\System\capabilities.as

↓に置き換える

intrinsic class System.capabilities
{
	static var MIMETypes:Array;
	static var audioMIMETypes:Array;
	static var avHardwareDisable:Boolean;
	static var has4WayKeyAS:Boolean;
	static var hasAccessibility:Boolean;
	static var hasAudio:Boolean;
	static var hasAudioEncoder:Boolean;
	static var hasCMIDI:Boolean;
	static var hasCompoundSound:Boolean;
	static var hasDataLoading:Boolean;
	static var hasEmail:Boolean;
	static var hasEmbeddedVideo:Boolean;
	static var hasMFI:Boolean;
	static var hasMIDI:Boolean;
	static var hasMMS:Boolean;
	static var hasMP3:Boolean;
	static var hasMappableSoftKeys:Boolean;
	static var hasMouse:Boolean;
	static var hasPrinting:Boolean;
	static var hasQWERTYKeyboard:Boolean;
	static var hasSMAF:Boolean;
	static var hasSMS:Number;
	static var hasScreenBroadcast:Boolean ;
	static var hasScreenPlayback:Boolean;
	static var hasSharedObjects:Boolean;
	static var hasStreamingAudio:Boolean ;
	static var hasStreamingVideo:Boolean;
	static var hasStylus:Boolean;
	static var hasVideoEncoder:Boolean;
	static var imageMIMETypes:Array;
	static var isDebugger:Boolean;
	static var language:String;
	static var localFileReadDisable:Boolean ;
	static var os:String;
	static var screenOrientation:String;
	static var screenResolutionX:Number;
	static var screenResolutionY:Number;
	static var softKeyCount:Number;
	static var version:String;
	static var videoMIMETypes:Array;
}

サンプルは略

MTASCFlash Lite 2のSharedObjectを使う

Flash Lite 2.x ActionScript Language Reference > ActionScript classes > SharedObject

http://livedocs.macromedia.com/flashlite/2/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000749.html

Flash Lite 2.x ActionScript リファレンスガイド > ActionScript クラス > SharedObject

http://livedocs.macromedia.com/flashlite/2_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts_wEcute&file=00000749.html

アプリケーションが要求したときに、データをすぐにデバイスから利用できるようにするため、

Flash Lite 2.0 では、リスナーを設定する必要があります。

との事なのでMTASCの↓に

(インストールフォルダ)\std\SharedObject.as

↓の行を追加する

static function addListener(objectName:String, notifyFunction:Function) :Void;

でサンプル

class SharedObjectRei
{
	static function main ()
	{
		var sor : SharedObjectRei = new SharedObjectRei (_root);
	}
	public function SharedObjectRei (mc: MovieClip)
	{
		mc.createTextField ("tf", mc.getNextHighestDepth () , 0, 0, Stage.width, Stage.height);
		mc.tf.text = "SharedObjectRei\r";
		
		SharedObject.addListener ("Prefs", loadCompletePrefs );
		// 共有オブジェクトを作成することができる
		var Prefs : SharedObject = SharedObject.getLocal ("Prefs");
	}
	function loadCompletePrefs (mySO : SharedObject)
	{
		if (0 == mySO.getSize ())
		{
			// サイズが 0 の場合、データ初期化する必要がある
			mySO.data.name = "Sigismund";
			mySO.data.email = "siggy@macromedia.com";
		} 
		else
		{
			// mySO のすべてのデータトレースする
			_root.tf.text+= "Prefs: " + "\r";
			for (var idx in mySO.data)
			{
				_root.tf.text+= " " + idx + ": " + mySO.data [idx] + "\r";
			}
		}
	}
}

コンパイルは↓を参考に

ActionScript 2.0メモ

http://www.saturn.dti.ne.jp/~npaka/flash/as20/index.html

2006-12-18

クロージャの代りに無名クラスを使った場合

元記事:

http://www.arclamp.jp/blog/archives/marulec2006_2.html

http://d.hatena.ne.jp/t_yano/20061216/1166296467

こんな感じですか?

public interface Executable <T> {
    void execute(T argument);
}

public class IterationExecutor<T> {
    private Collection<T> collection;
    public IterationExecutor(Collection<T> collection) {
        this.collection = collection;
    }
    public IterationExecutor(T[] array) {
        this.collection = new ArrayList<T>();
        Collections.addAll(this.collection, array);
    }
    public void each(Executable<T> e) {
        for(T element: collection) {
            e.execute(element);
        }
    }
}

public class IntegerBuffer {
    private int value = 0;   
    public IntegerBuffer(int value) {
        this.value = value;
    }
    public void add(int number) {
        this.value += number;
    }
    public int getValue() {
        return this.value;
    }
}

public class Sample {
    public static void main(String[] args) {
        final IntegerBuffer total = new IntegerBuffer(0);
        new IterationExecutor<Integer>(new Integer[]{1,2,3,4,5}).each(
            new Executable<Integer>(){
                public void execute(Integer it) {
                    total.add(it);
                }
            });
        System.out.println(total.getValue());
    }
}

importなどは省略しました。

Sample以外は再利用可能なので……いやどうだろう

ログイン ユーザー登録
ようこそ ゲスト さん