約 391,578 件
https://w.atwiki.jp/chapati4it/pages/80.html
C言語の文字列の連結は大まかに以下の3通りの手段が考えられます。 strcat関数を使う memcpy関数を使う sprintf関数を使う この中でもsprintfは以下のような書き方ができて便利なのですが、性能は他の方法に比べると劣ります。 sprintf(buff, "%s%s", stra, strb); どれくらい劣るのかベンチマークしてみると結果は以下のようになりました。 方法 ミリ秒 strcat 75 memcpy 263 sprintf 730 memcpyを使うのが一番早いかと思ったのですが、わたしの環境ではstrcatが75ミリ秒と一番速く驚きました。 ideoneの結果はmemcpyが一番早いので、わたしの環境がおかしいのかもしれません。 sprintfはstrcatの10倍の時間がかかっているので、性能にシビアな時は使わないほうがよさそうです。 ideoneでの実行結果 方法 ミリ秒 strcat 120,000 memcpy 70,000 sprintf 250,000 サンプルダウンロード strcat.zip strcat.c zipはサンプルソースと実行ファイルが入っています。 実行ファイルをダウンロードしたくない人はソースだけダウンロードしてください。 サンプルソース #include stdio.h #include stdlib.h #include time.h #include string.h int main(void) { char a[100]; char b[100] = "hogehogehogehogehogehoge"; char c[100] = "mogemogemogemogemogemoge"; int i = 0; size_t sa, sb; long start, end; //strcpy+strcat start = clock(); for (i = 0; i 1000000; i++) { strcpy(a, b); strcat(a, c); } end = clock(); printf("strcpy+sarcat %ldミリ秒\n", end - start); //memcpy start = clock(); for (i = 0; i 1000000; i++) { sa = strlen(a); sb = strlen(b); memcpy(a, b, sa); memcpy(a + sa, c, sb + 1); } end = clock(); printf("memcpy %ldミリ秒\n", end - start); // sprintf start = clock(); for (i = 0; i 1000000; i++) { sprintf(a, "%s%s", b, c); } end = clock(); printf("sprintf %ldミリ秒\n", end - start); puts(a); return EXIT_SUCCESS; }
https://w.atwiki.jp/fumiduki1985/pages/204.html
datetimeオブジェクトのstrptime()メソッドを使うことで可能。 下記のようなディレクティブを使うことで自由な書式の文字列を解析してdatetimeオブジェクトを作成できる。 ディレクティブは下記以外にも使用可能。詳細はPythonリファレンスの該当ページを参照のこと。 https //docs.python.jp/2.7/library/datetime.html#strftime-and-strptime-behavior ディレクティブ 意味 例 %Y 西暦(4桁) 2016, 2017, ... %m 0埋めした月 01, 02, ... 12 %d 0埋めした月中の日にち 01, 02, ... 31 %H 0埋めした24時間表記の時 00, 01, ... 23 %M 0埋めした分 00, 01, ... 59 %S 0埋めした秒 00, 01, ... 59 記述例: import datetime # 第1引数で渡した文字列を第2引数のフォーマットに従って解析してdatetimeオブジェクトを作成する time = datetime.datetime.strptime( 2017/05/23 13 08 33 , %Y/%m/%d %H %M %S ) このページのタグ一覧 Python プログラミング
https://w.atwiki.jp/suffix/pages/61.html
一個の文字列について扱いたい場合は次のようにする。 char moji[5] = "moji"; //実際の文字数より1多いのは文字列を格納するときに入る最後の¥0のため。 また複数の文字列について扱いたい場合には次のようにする。 char *mojihairetu[2]; mojihairetu[0] = "Moji hairetu test"; mojihairetu[1] = "Futatume moji hairetu"; つまり、分かりやすく整理すると(¥0とかは略) char型[**mojihairetu]が示すもの→M char*型[*mojihairetu]が示すもの→Moji hairetu test char**型[mojihairetu]が示すもの→Moji hairetu test Futatume moji hairetu の関係になっている。
https://w.atwiki.jp/ohden/pages/767.html
接続文字列いろいろ ローカルネームを使った接続 sqlplus USERID/PASSWD@TNSNAME "user id=USERID;password=PASSWD;data source=LOCALNAME" e.g.) user id=scott;password=tiger;data source=orcl 簡易接続を使った接続 sqlplus USERID/PASSWD@IPADDR PORT/SID ※IPADDRはホスト名でも可。PORT、SIDは省略可。 user id=USERID;password=PASSWD;data source=//IPADDR PORT/SID e.g.) user id=scott;password=tiger;data source=//dbserver 1521/orcl 更新日: 2016年01月20日 (水) 14時54分12秒 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/fumiduki1985/pages/24.html
MAXScriptのexecute関数またはgetNodeByName関数を使用する。 execute関数は、指定した文字列をMAXScript式としてコンパイル及び評価して結果を返す。 複数行に渡るMAXScript式だった場合、最後の式の結果を返す。 MAXScriptでは「$+オブジェクト名」を実行すると、その名前に一致するオブジェクトを返す。 そのため、スクリプトで作成した「$+オブジェクト名」の文字列をexecute関数に渡すことでオブジェクトを取得できる。 ただし、オブジェクト名に空白文字が含まれる場合、シングルクォートで囲む必要がある。(記述例2を参照) 指定したオブジェクトが存在しなかった場合、undefined等を返すのではなく、例外を発生するので注意。 getNodeByName関数はその名のとおり取得したいノード名の文字列を渡し、ノードを返す関数。 execute関数を使用する場合と違い、大文字/小文字を区別するかどうかを指定したり、指定された名前を持つ全ノードを配列で取得することもできる。 指定したオブジェクトが見つからなかった場合、undefinedを返す。 (同名ノードを配列で返すモードの場合は空配列を返す。) 記述例: name = "Sphere" obj = execute("$" + name) 記述例2: obj = execute("$ Test Object ") -- 空白文字を含む場合はオブジェクト名をシングルクォートで囲む 記述例3: name = "Sphere" -- execute使用時と違い「$」が要らない点に注意 obj = getNodeByName(name) このページのタグ一覧 3dsMax MAXScript プログラミング
https://w.atwiki.jp/fumiduki1985/pages/346.html
STLが使用できるならば、std all_ofアルゴリズムとisdigit関数を利用するとシンプルに判定できる。 記述例: #include cctype #include algorithm std string target = "abc123"; // 判定対象の文字列 bool isAllOfDigit = std all_of(target.cbegin(), target.cend(), isdigit); このページのタグ一覧 C/CPP プログラミング 最終更新日:2018/12/17
https://w.atwiki.jp/tonton/pages/8.html
(2005年11月12日) 半角→全角変換
https://w.atwiki.jp/fujiyan/pages/43.html
Slim3で部分一致検索(Like検索)を頑張ってみる (2012/06/19追記) 検索結果のキャッシュのことを考えたら、本ページのような小細工をせずに、おとなしく結果全件をListで取得したほうが良い気がしてきました…。 検索結果の件数が大きい場合を想定して、Listで取得するのを控えていたのですが、そもそも、そんな検索を許さないようにしたほうが健全ですしね…。 Datastoreでの文字列検索 GAEのDatastoreでは、Entityの検索方法として、プロパティの文字列の前方一致をネイティブでサポートしている。 よって、Slim3でも基本は文字列の前方一致となる。 package jp.fujiyan.gae.datastoretest; import java.text.DecimalFormat; import java.util.List; import jp.fujiyan.gae.datastoretest.meta.FooMeta; import jp.fujiyan.gae.datastoretest.model.Foo; import junit.framework.Assert; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.slim3.datastore.Datastore; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; public class QueryTest { private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()); private static DecimalFormat FORMAT = new DecimalFormat("0000"); @Before public void setUp() throws Exception { helper.setUp(); } @After public void tearDown() throws Exception { helper.tearDown(); } @Test public void test1() { // 2000個のEntityを作成 for (int i = 1; i = 2000; i++) { Foo foo = new Foo(); foo.setName("Foo" + FORMAT.format(i)); Datastore.put(foo); } // "Foo11"で始まるEntityは100個 List Foo list = Datastore.query(Foo.class).filter(FooMeta.get().name.startsWith("Foo11")).asList(); Assert.assertEquals(100, list.size()); } } InMemoryFilter 前方一致だけでは何かと不便なので、Slim3では部分一致でも検索が可能な手段を用意している。 InMemoryFilterという仕組みで、Datastoreから返された検索結果に対してフィルタリングをかけている。 ※以降、面倒なのテストメソッドのみ掲示… @Test public void test1() { // 2000個のEntityを作成 for (int i = 1; i = 2000; i++) { Foo foo = new Foo(); foo.setName("Foo" + FORMAT.format(i)); Datastore.put(foo); } // "2"を含むEntityは543個 List Foo list = Datastore.query(Foo.class).filterInMemory(FooMeta.get().name.contains("2")).asList(); Assert.assertEquals(543, list.size()); } limitとoffset ページングを実施する上で必要な処理として、例えば、ページ毎10件のページング処理で、8ページ目に該当するレコードを取得する場合には、71件目から10件分だけレコードを抽出する処理がある。 GAEのDatastoreでは、Queryのn件目から取得(offset)、クエリの結果をn件まで取得(limit)、というのがネイティブでサポートされている。 よって、Slim3でもoffsetやlimitが利用可能 これさえ使えば、ページングも楽々ですよ。 @Test public void test1() { // 2000個のEntityを作成 for (int i = 1; i = 2000; i++) { Foo foo = new Foo(); foo.setName("Foo" + FORMAT.format(i)); Datastore.put(foo); } // "Foo11"で始まるEntityは100個 List Foo list = Datastore.query(Foo.class).filter(FooMeta.get().name.startsWith("Foo11")).offset(71).limit(10).asList(); Assert.assertEquals(10, list.size()); Assert.assertEquals("Foo1171", list.get(0).getName()); Assert.assertEquals("Foo1172", list.get(1).getName()); Assert.assertEquals("Foo1173", list.get(2).getName()); Assert.assertEquals("Foo1174", list.get(3).getName()); Assert.assertEquals("Foo1175", list.get(4).getName()); Assert.assertEquals("Foo1176", list.get(5).getName()); Assert.assertEquals("Foo1177", list.get(6).getName()); Assert.assertEquals("Foo1178", list.get(7).getName()); Assert.assertEquals("Foo1179", list.get(8).getName()); Assert.assertEquals("Foo1180", list.get(9).getName()); } InMemoryFilterとlimit/offsetは併用できない… じゃあ、あとはInMemoryFilterを使えば、部分一致検索の結果に対してページングが出来そうですね。 @Test public void test1() { // 2000個のEntityを作成 for (int i = 1; i = 2000; i++) { Foo foo = new Foo(); foo.setName("Foo" + FORMAT.format(i)); Datastore.put(foo); } // "2"を含むEntityは543個 List Foo list = Datastore.query(Foo.class).filterInMemory(FooMeta.get().name.contains("2")).offset(0).limit(10).asList(); // 543個の中から先頭10個をとったはずが… Assert.assertEquals(10, list.size()); } 上記のテストの実施結果は junit.framework.AssertionFailedError expected 10 but was 1 ... なんと1件しか取れていません。 これは、SlimがGAEのネイティブなQueryを先に実施し、その結果に対してInMemoryFilterを適用するからです。上記の場合、2000個のEntityに対して、最初にoffset(0).limit(10)が実施されます。その結果、Foo0001~Foo0010の10個のEntityが返されます。 そのFoo0001~Foo0010の結果に対して、contains("2")のInMemoryFilterが実施されるため、結果はFoo0002の1件しか残らなくなるのです。 じゃあ、地道にasIterator()で拾い上げようと思ったら… offsetやlimitが使えないとなると、クエリ結果を最初から順番に拾い上げて、ページ先頭レコードまでスキップした後、目的の件数分取得する、しかなさそう。 ちょうどModelQuery#asIterator()というメソッドがクエリ結果を拾い上げるIteratorを返してくれそうです。では早速… java.lang.IllegalStateException In case of asIterator(), you cannot specify filterInMemory(). ... はい、一旦InMemoryFilterを適用してしまうと、asIterator()は使えないのです。 まぁ、Slim3の仕様として諦めてください…。 そこそこ自前で処理するしかなさそうです ということで、何もFilterを適用しないModelQueryの結果に対して、指定の条件でフィルタリングした結果を拾い上げるIteratorを作るしか無さそうです。 キモなところはApacheのCommons Collectionsを使っています。まぁ代わりにGuavaのIteratorsを使ってもイイかと思います。 package jp.fujiyan.gae.datastoretest; import java.util.Iterator; import org.apache.commons.collections.Predicate; import org.apache.commons.collections.iterators.FilterIterator; import org.slim3.datastore.InMemoryFilterCriterion; import org.slim3.datastore.ModelQuery; /** * InMemoryFilterでasIterator()が使えないため用意しています。 * @author Fujiyan * * @param M */ public class ModelQueryIterator M implements Iterator M { public interface IPredicate M { boolean evaluate(M model); } protected FilterIterator delegate; public ModelQueryIterator(ModelQuery M query, InMemoryFilterCriterion criterion) { final InMemoryFilterCriterion innerCriterion = criterion; this.delegate = new FilterIterator(query.asIterator(), new Predicate() { @Override public boolean evaluate(Object obj) { return innerCriterion.accept((M) obj); } } ); } @Override public boolean hasNext() { return delegate.hasNext(); } @Override public M next() { return (M) delegate.next(); } @Override public void remove() { delegate.remove(); } } いろいろ工夫の余地はありますが、とりあえず検証用のサンプルとして…。 使い方は下記の通り @Test public void test1() { // 2000個のEntityを作成 for (int i = 1; i = 2000; i++) { Foo foo = new Foo(); foo.setName("Foo" + FORMAT.format(i)); Datastore.put(foo); } // "2"を含むEntityは543個 Iterator Foo iterator = new ModelQueryIterator Foo (Datastore.query(Foo.class), FooMeta.get().name.contains("2")); Assert.assertEquals("Foo0002", iterator.next().getName()); Assert.assertEquals("Foo0012", iterator.next().getName()); Assert.assertEquals("Foo0020", iterator.next().getName()); Assert.assertEquals("Foo0021", iterator.next().getName()); Assert.assertEquals("Foo0022", iterator.next().getName()); Assert.assertEquals("Foo0023", iterator.next().getName()); Assert.assertEquals("Foo0024", iterator.next().getName()); Assert.assertEquals("Foo0025", iterator.next().getName()); Assert.assertEquals("Foo0026", iterator.next().getName()); Assert.assertEquals("Foo0027", iterator.next().getName()); } あとは、このModelQueryIteratorで、指定のレコードまでスキップ/指定の件数を取得、というお決まりのページング処理を行えば、何とかなるかと思います。
https://w.atwiki.jp/dynamics-ax/pages/54.html
StringEdit の縦幅を中の文字列によって変化させるには 改行コードの数を求めて、 その分、StringEdit の行数を増加させる void updateStringEditDisplayHeight(FormStringControl _stringEdit) { // テキストボックスの縦幅を調整する str strTmp; str strTmpReplaced; int lineNum; ; strTmp = _stringEdit.text(); // 改行コードの数を取得する strTmpReplaced = strReplace(strTmp, num2char(10), ""); // 縦の行数を算出 lineNum = strlen(strTmp) - strlen(strTmpReplaced); _stringEdit.displayHeight(lineNum + 1); }
https://w.atwiki.jp/fumiduki1985/pages/34.html
Softimageのコマンドプラグインの戻り値として文字列を返す場合、ワイド文字を返す必要があると思われる。 マルチバイト文字で返した場合、ブール型として判定されてしまう様子。 記述例: XSIPLUGINCALLBACK XSI CStatus TestCommand_Execute(XSI CRef in_ctxt) { XSI Context ctxt(in_ctxt); ctxt.PutAttribute(L"ReturnValue", L"Hello World"); // ワイド文字を使う return XSI CStatus OK; } このページのタグ一覧 C/CPP Softimage プログラミング