• 締切済み

文字列をバイト単位で取り出したい

PostgreSQL 9.5.2を使用しています。 「ABCde」を先頭5バイト分で「AB」と取り出したいです。 但し、例のように「C」が中途半端に範囲にかかるときは、取り出さないようにしたい のですが、どのようにすれば、可能なのでしょうか。 お忙しい中、申し訳ありませんが、ご教授頂けると助かります。 宜しくお願いいたします。

みんなの回答

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.2

10回読みました。わかりませんでした。 1,2桁目が全角の'A'、3,4桁目が全角の'B'で、5桁目は? 半角’C’は取り出すけど、全角'C'は取り出さない?スペース?半角ならなんでもいい?

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.1

SQLではなく、プログラミング側で処理すべきだと思います。で、先頭から1文字ずつバイト数をカウントしていくことになるでしょうね。 ところで、「「C」が中途半端に範囲にかかるときは、取り出さないようにしたい」ということは、UTF-8じゃなくて、SJISとかを使用しているという事なんでしょうかね。

関連するQ&A

  • この組合せ文字列をルールに従って並べることは可能でしょうか

    A、B、C、D、Eという5つのアルファベットの重複を許さない組合せは35通りあります。 (A、B、C、D、E、AB、AC、AD、AE~ABCDE) これを1組づつ書いた35枚のカードがあるとします。 そしてまず初めにそのカードの中から「A」とだけ書かれたカードを置き、その下に続けて以下の2つのルールにしたがってカードを並べて行きます。 ルール1 下に並べるカードはすぐ上にあるカードに書かれてある文字から1つ減らした物か、1つ増やした物しか置けない。 ルール2 並べて行きとき、同じ文字が9個以上続いてはならない。 例 A AB ABC A C : : この例ではAが4個続いていると見ます。 ここように続けて並べて行き、残りの34枚すべてを並べることは可能でしょうか。 もし可能でしたらその並べ方を教えてください。 お願いいたします。

  • バッチファイル 文字列操作のやり方

    お世話になります。 バッチファイルのコマンドについてですが、 for文の中で 一番下の階層のファイル名の先頭5バイトが "abcde"のものだけ処理対象にしたいと考えています。 例えば、 C:\tempに以下のファイルがあったら C:\temp\abcdefg.txt    ・・・(1) C:\temp\xxxxxxx.txt    ・・・(2) C:\temp\abcde.txt    ・・・(3) C:\temp\abc.txt    ・・・(4) C:\temp\abcdezzzz.txt    ・・・(5) (1)、(3)、(5)だけを処理させたいと考えています。 実装方法として、以下を考えましたがうまくいきません。 dir /s /b /a-d C\Temp > file.txt for /f "delims=" %%F in (file.txt) do ( set A=%%~nF% if "%%A:~0,5%"=="abcde" ( <処理コマンド> ) ) おそらくfor文の中で何個も命令を記述できないということと、 パラメータ修飾子の指定が間違っているからだと思われますが、 うまくできない理由を知りたいです。 よろしくお願いいたします。

  • スペースを含んだ文字列から文字列の抽出

    エクセルバージョン2007 スペースを含む文字列で、A列に文字列がある時、以下の式を組んで文字列を抽出しています。 先頭にIDの数字が有る場合は、それぞれの目的に合った文字列を抽出しています。 B1=LEFT(A1,SEARCH(" ",A1,1)-1) C1=LEFT(MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),SEARCH(" ",MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),1)-1) 3 3df-32654-10 CCCCHH 10 1ab-12345-00 AAABBBB この文字列の場合、B列に3と10が表示、C列に 3df-32654-10 1ab-12345-00が表示されます。 先頭に、IDの無い文字列は以下の様な構成です。 6rt-95132-00 PPPKKK この文字列の場合、B列に6rt-95132-00、C列にPPPKKKが表示されてしまい、この場合、IDの数字が無い場合はB列には表示させない又は、C列に6rt-95132-00させたいと思っています。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

  • 全て英語大文字の文章で先頭だけを大文字に

    お世話になります。 EXCELで全て英語大文字の文章で先頭だけを大文字、先頭以外を小文字に変換する方法を教えて下さい。 例)ABCDE/FGHIJKLM/NOPQ → Abcde/Fghijklm/Nopq このように/あるいはスペースなど、文字列間には何らかの区切りが有るものとし、それも選択出来るのが良いです。 このような文字列が何千行もあるので、セルに関数などを入れて、行数分ドラッグしてコピーするだけとか、セルで済むのが良いですが、無理ならマクロでも構いません。 セルでの関数などが複数セルに分かれても結構です。 例)A1~:該当文章、B1~:該当文章A1の置換1段階、C1~:該当文章A1の置換1段階、D1:置換完了文章 以上、宜しくお願い致します。  

  • 【正規表現】欠けた文字列にも合致させたい

    RSSリーダーで記事や画像を収集していますが、収集した保存フォルダ名に、URLなど不要なデータが付けられる場合があり、そこを削除したいんです。 たとえば ○○社、新OS発表! www.○○.××.com   ←この後ろはいらない。 ただし、テキスト数の上限があっていつもこの長さとは限りません。 ○○社、新OS発表!評判は? www.○○.×  ←中途半端に切れてる。 というわけで、正規表現で (ABCDEFG|ABCDEF|ABCDE|ABCD|ABC|AB|A)$ としてみたのですが、この後ろが長い場合もあり(20文字とか)、毎回作るのも面倒です。 しかも A だけでは他のファイルもたくさん引っかかってきます。 このような時にはどう工夫すればよいかアドバイスをお願いします。

  • エクセルで2byte文字を含むセルのみ抽出したいのですが…。

    いつもお世話になっています。 環境はWindows2000pro/EXCEL2000です。 以下のようなリストがあります。    A 1 12abあ 2 3A456 3 abcde 4 漢字 5 111  … 約4000行あります。 この中で2byte文字を含むセルのみ抽出し、 B列に○を付けたいのですが、 (上記リストの場合、B1,B2,B4に○) うまくいかず困っています。 4000行手作業は効率も精度も悪くなりそうです…。 2byte文字の入る位置はランダムで、文字も 特定ではありません。 うまくいく方法があれば教えてください。 よろしくお願いいたします。

  • Qtの文字列変換について

    初めて質問させて頂きます。 現在下記の環境にて開発をしております。 OS:Windows7 言語:C++(VS2005) Qt:4.7.3 下記のコードを試すと、違う結果となってしまっております。 私には、なぜ違う結果となるかわかりません。 C++の基本的な動作の話でしたら申し訳ありませんが、是非ご教授下さい。 ----- QVariantMap test; test.insert( "STR_TEST", "abcde" ); QByteArray hogehoge = test.value("STR_TEST").toString().toLocal8Bit(); char* hoge1 = hogehoge.data(); char* hoge2 = (test.value("STR_TEST").toString().toLocal8Bit()).data(); ----- これでhoge1とhoge2の内容が違ってしまいます。 hoge1は"abcde"がとれています。 hoge2は失敗しているようで、初期値のままのようです。 なにか変換の手順等の問題があるのでしょうか? 宜しくお願いいたします。

  • Excel VBA 文字列分割の方法で

    EXCEL および WORD のVBAです。 2003 および 2010でやっています。 たとえば文字列で以下のようなものがあったとき、 12,6,"abcde","(3,4)","efg""h""ijk",3 このとき、文字列をカンマ(,)で分割して   12   6   "abcde"   "(3,4)"   "efg""h""ijk"   (あるいは efg"h"ijk)   3 のようにして抽出したいのですが、どのような方法があるでしょうか。 たとえば、      mid(文字列,i,1) のようにiの値を文字列の長さ分ループさせて、1文字ずつ自力で 文字列の範囲や""などを解釈して分割するしかないのでしょうか。 それともスマートな方法があるのでしょうか。 どなたか、よろしくご教授ください。

  • <>で囲まれた文字列を文字列のなかから取り出す方法

    現在、C++を使って、文字列の中から<>で囲まれた部分を抜き出して表示する、というプログラムを書きたいんですが、どうもうまくいきません。例として、 int main(void) { char html[] = "<abdc><kihddds><mokus>"; char *p; int c; c = '<'; p = strchr(html, c); printf("%cは文字列の%d番目にあります。\n", c, p-html+1); } のような感じで最初の<と最初の>の場所を探すのはできるのですが、2個目以降を同じようにさがすことができません・・・。 上記の例でいうと、実行結果として abdc kihddds mokus とでるようなものをつくりたいのです。 良い方法がありましたら、どうぞご教授おねがいしますm(__)m

  • VBSで配列の結果内容から任意の文字列を探す。

    VBS初心者です。 配列を1つにまとめた内容(strMSG)から 正規表現を利用して任意のキーワードを元に grepのような実行結果が欲しいです。 【実行サンプル】 ------------------------------------------- Option Explicit Dim TEST(4),i,strMSG TEST(1) = "001-AB1" TEST(2) = "001-AB2" TEST(3) = "AB1-001" TEST(4) = "AB2-001" For i = 1 To UBound(TEST) strMSG = strMSG + TEST(i) & vbCrLf next msgbox strMSG ------------------------------------------- strMSGの内容として4行分TESTの配列が格納されています。 ここでは例として、先頭001で始る文字列を検索かけたいです。 【理想の実行結果】 検索キーワード:先頭が001で始る行 ------------------------------------------- 001-AB1 001-AB2 ------------------------------------------- よろしくお願いします。 【備考】 1つ1つのTEST配列単位でgrepかけるより、配列を1つにまとめたものに 1度だけgrepかけたほうが処理速度が速いかな?と考えているためです。