問題タブ [tokenize]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
split - 文字列を分割し、db を配置して PHP で製品を表示する
私はphpが初めてです。次のタスクを適切に配置する方法を見つけるのを手伝ってくれませんか:
テーブル「製品」
ID - 詳細
1 - 1-30,2-134:6:0;;2-7:55:0;;1-2,2-8:25:0 - この文字列は非常に長くなる可能性があります
2 -
3 - 1-360:17:0;;1-361:185:0
すべての製品 1、2、3、... は 1 行で db に格納されますが、製品はさらにサイズと色ごとに個別に認識されます。そのため、一部の製品は他の製品よりも多くのサイズと色を持つことができます. 場合によっては、商品のサイズが 1 つだけで、色がいくつかある場合があります。このような場合、この 1 つのサイズは db には格納されず、色のみが格納されます。テーブルが不規則に埋まっています。詳細列は必須ではありません (空にすることもできます)。詳細列は次のように構成されます。例:
1-30,2-134:6:0;;2-7:55:0 ここで、メインのセパレータは ';;' であるため、この文字列は次のように分割されます:
1-30 ,2-134:6:0
2-7:55:0
最初に分割された行を考慮すると、次に分割される部分があります:
1-30 - 最初の部分
2-134
- 2番目の部分
6 - 3番目の部分
0 - 4番目の部分
たまに第二弾が出ます。前編と後編は、1-XXX または 2-XXX から開始できます。3 番目の部分は、在庫のある製品の数を意味します。4 番目の部分は重要ではないため、無視できます。
テーブル「タイプ」
ID - 値
1 - 製品
2 - 色
テーブル「引数」
id - 値
1 - sr20 h12
2 - sr21 h13
3 - 青
..
30 - sr25 h15
134 - 赤
上記の表を考慮すると、前述の例は次のことを意味します
。1-30 は 1=製品、30=sr25
h15 を意味します。2-134 は 2=色、134=赤を意味します。
方法で製品を適切に表示する php スクリプトを準備するのを手伝ってくれませんか:
製品 1 - サイズ: sr25 h15、色: 赤、在庫あり: 6
製品 1 - サイズ: sr30 h16、色: 青、在庫あり: 13
製品1 - サイズ: sr35 h20, 色: ピンク, 在庫あり: 2
製品 2
製品 3 - 色: ホワイト, 在庫あり 4
Bill の提案のおかげで、次のようにファイルを分割しました
。
foreach ...
$fields = expand(":", $products);
foreach ...
$attribs = expand(",", $fields);
foreach ...
ただし、どのように使用すればよいかわかりません:
($attrib_type, $attrib_value) = expand("-", $attribs[0]);
事前にロードされた引数用の関連付けテーブルも用意しましたが、それをどのように使用できるかわかりません。
これは私のコードです:
$results = mysql_query("SELECT id, name, details FROM products") or die ('query error');
if(mysql_num_rows($results) > 0) {
}
javascript - Javascript レクサー/トークナイザー (Python で?)
Javascript字句解析器またはトークナイザーを知っている人はいますか(できればPythonで?)
基本的に、任意の Javascript ファイルを指定して、トークンを取得したいと考えています。
例えば
フー=1
次のようになります。
- 変数名:「foo」
- 空白
- 演算子 : 等しい
- 空白
- 整数: 1
java - 文字列トークナイザー
コードにコメントを追加して、この文字列トークナイザーがどのように機能するかを理解してくれる人はいますか? 助けてくれてありがとう!
java - Javaシェルワイルドカードトークナイザー
私のJavaは非常に錆びており、LinusかWin32かに応じて、シェルスクリプトまたはバッチファイルの実行を簡素化するユーザーインターフェイスを作成しようとして立ち往生しています。ファイルには、次の命名規則があります。
最終的には、明確な用語を解析して、次のことができるようにしたいと思います。
- コマンドをトークン化し(たとえば、「-」で区切る)、foxproのコマンドウィンドウやciscoのIOSなどの簡略化された用語に短縮します(たとえば、「my cogr」はunixでは「mysql-connect-grid」を実行し、win32では* .cmdを実行します)
- また、IOSのスタイルでは、ユーザーが省略形のコマンドを入力できるようにして、疑問符(?)を入力できるようにします。これにより、残りの(または次の)固有のコマンドオプション(「my?」など)に関するヒントが得られます。 mysqlを返し、「my?」は接続またはダンプを返します)。その他の戻り値は、一意でないコマンドまたは一致しなかったコマンドの場合、「あいまい」または「不明」になります。些細なことのように思えるかもしれませんが、各フォルダーには何百ものコマンドがあり、ユーザーは考えたくありません...
ディレクトリからファイルのリストを取得し、ファイルの配列を再調整する関数を作成しました。次に、動的にサイズ設定された潜在的なコマンドのグリッドを返す以下の方法を使用して、それを2次元配列に変換します。
これは2次元配列(下)を返すのでgrid[Row-N][Col-0]
、一致します。row[0]
ワイルドカードcmdToken[0] && row[1]
が「like」である個別の値のみをプルcmdToken[1]
して、ユーザーがコマンドを"my du gr ?"
返すまでコマンドをつなぎ合わせることができるようにしたいのですが"ENTER, [se314]"
、それが理にかなっている場合は...
私の課題:Javaのマッチャー関数に頭を悩ませているようには見えません。SQLの場合、次のようになります。
またはさらに良い:連続する各列にint深度マークを再帰的に設定する
完全に一致するまで。
必死になって試したjoSQLというパッケージを見つけましたが、Java6で動作させることができないようです。とにかく:私はまた、すべてが単一のクラスに含まれることができるように、純粋なJavaソリューションを望んでいました...
多分スキャナーか何かを使って多次元配列を解析して一意の値を探します...私はおそらくそれを必要以上に複雑にしていることを知っています。
正しい方向にゆっくりと微調整していただければ幸いです。
TIA
java - Java - パラメータ リストのトークン化
String パラメーターを受け取り、パラメーター名と値の 2 次元 String 配列を返すメソッドを作成しようとしています。
入力の例は次のとおりです (引用符内):
だから「;」はリスト区切り記号であり、代入演算子「=」は有効なパラメータを示します。「\」は捨て値です。基本的に、これを可能にする正規表現を探しています。または、誰かが提供できる場合は、よりエレガントなソリューションを探しています。
vb.net - vb.netの文字列から電話番号をインポートする
これを行うためのより簡単な方法がなければなりません。
「電話番号のインポート」という電話番号クラスの関数を作成しようとしています。どこかに10桁の文字列を取り(そして拡張子を考慮に入れて)、それらを独自のプロパティ(AreaCode、Prefix、Suffix、およびExtension(aaa-ppp-ssss-xxxx ...))にインポートする必要があります。
正規表現を使用して入力をチェックし、それが有効であることを確認します。次に、これらの部分をそれぞれのプロパティにトークン化します。私が持っているものはこのように見えます(不完全):
何か案は?
php - token_get_all空白の動作
誰かが私を助けることができるかどうかはわかりませんが、とにかく尋ねます。私はtoken_get_all
javascriptで書かれたphpのような関数を作成しています。この関数は、指定されたphpコードを「トークン化」する必要がありますが、空白に問題があります。
token_get_all
PHPで関数を実行すると、一部の空白のみがトークンと見なされ、他の空白は無視されることがわかります。
この関数が空白でどのように動作するかを誰かに説明してもらえますか?それについてのドキュメントを見つけたことがありますか?
アップデート
- phpとifの間:無視されます
- ifと(:トークン化
- $ varと=の間:トークン化
- =と0の間:トークン化
- )と{の間:トークン化
- {と?>の間:トークン化
c++ - C++ のトークナイザーを生成するための lex/flex よりも優れた (より現代的な) ツールはありますか?
最近、複雑なコマンド ライン引数から出力ファイルを生成する既存のツールに、ソース ファイルの解析機能を追加しました。
コマンド ライン引数が非常に複雑になったため、非常に大きなコマンド ラインであるかのように解析されるファイルとして提供できるようになりましたが、構文は依然として扱いにくいものでした。そこで、より合理的な構文を使用してソース ファイルを解析する機能を追加しました。
Windows 用の flex 2.5.4 を使用して、このカスタム ソース ファイル形式のトークナイザーを生成しましたが、うまくいきました。しかし、私はコードが嫌いでした。グローバル変数、変な命名規則、そしてそれが生成する C++ コードはひどいものでした。既存のコード生成バックエンドは flex の出力にくっついていました - 私は yacc も bison も使いません。
私はそのコードに飛び込もうとしていますが、より優れた/より最新のツールを使用したいと考えています。誰かがそれを知っていますか。
- Windows コマンド プロンプトで実行します (Visual Studio との統合は問題ありませんが、ビルドには make ファイルを使用します)
- カプセル化された適切な C++ トークナイザーを生成します。(グローバル変数なし)
- トークン化ルールを記述するために正規表現を使用します (lex 構文と互換性があります)。
- ファイルの読み取りに c-runtime を使用する (または偽造する) ことを強制しません。(メモリから解析)
- ルールによってトークナイザーがバックトラックする (または自動的に修正する) 場合に警告します
- 変数名とメソッド名を完全に制御できます (既存の命名規則に従うことができます)
- 名前の競合なしに、複数のパーサーを単一の .exe にリンクできます
- 必要に応じて UNICODE (16 ビット UCS-2) パーサーを生成できます
- 統合されたトークナイザー + パーサージェネレーターではありません (lex + yacc の置き換えではなく、lex の置き換えが必要です)
トークン化テーブルのみが利用可能であれば、おそらくトークン化テーブルを生成するだけのツールで生活できるでしょう。
c++ - 悪いポインタ?-C ++
ポインターを使用する、C++での宿題の文字列トークン化プログラムを作成しています。ただし、実行してデバッグすると、ポインターpStartが無効であると表示されます。私の問題はパラメーター化されたコンストラクターにあると感じています。コンストラクターとオブジェクトの作成の両方を以下に含めました。
デバッグ時にpStartが悪いポインタであると言われる理由を教えていただければ幸いです。
ありがとう!
完全なstringtokenizer.cpp:
関数Nextは、char配列内の次の単語へのポインターを返すことが想定されています。現在、終了していません。:)
フルstringtokenizer.h:
完全なmain.cpp:
c++ - ポインタで違反にアクセスしますか?-C ++
最近の学校のプロジェクトのポインターを使用して、単純な文字列トークン化プログラムを作成しました。ただし、StringTokenizer::Next()
メソッドに問題があります。このメソッドを呼び出すと、char配列内の次の単語の最初の文字へのポインターが返されるはずです。コンパイル時エラーは発生しませんが、次のような実行時エラーが発生します。
プログラムは現在char配列をトークン化しますが、その後停止し、このエラーがポップアップします。NULL
私はそれが私のNext()
方法で行っているチェックと関係があると感じています。
では、どうすればこれを修正できますか?
また、私がより効率的に、またはより良い実践でできることに気づいたら、私に知らせてください。
ありがとう!!
StringTokenizer.h:
StringTokenizer.cpp:
Main.cpp:
編集:
さて、区切り文字がスペースである限り、プログラムは正常に機能しています。しかし、それをdelimとして `/'に渡すと、アクセス違反エラーが再び発生します。何か案は?
スペースで機能する関数: