3

Web データをスクレイピングして Access 2007 に挿入しています。.vbs スクリプトを使用してデータをフェッチして挿入しています。廃棄プログラムが最近アップグレードされるまでは、問題はありませんでした。

各テキスト レコードには、末尾に向かって余分なスペースがあります。エンコーディングに関連しているようです。

トリム - 機能はこれでは機能しません。
Replace A (Circumflex) と xA0 を試しましたが、結果はありません。

実行中 - 現在、Left(mystring,len(mystring)-1)。

何百万ものレコードをスクレイピングすることになるので、これを解決する最も簡単で正しい方法は何でしょうか?

また、Access の既存のデータにこのような「汚染された」データが含まれるようになるため、これを修正する方法を教えてください。UPDATE ステートメントを使用しますか? 最後の文字をスペースとして確認する方法は?

4

2 に答える 2

4

Trim()末尾のスペースを削除します。そのため、文字列値がスペースのように見えるもので終わっていても、 によって削除されてTrim()いない場合、実際にはスペース文字ではない可能性があります。もう 1 つの可能性は、スペースの後に非表示の文字が続くことです。

いずれにせよ、最後の文字が実際に何であるかを知ることは役に立ちます。

SELECT Asc(Right(your_string, 1)) AS ascii_value
FROM YourTable;

そのキャラクターが何であるかがわかれば、それを取り除く最善の方法を決めることができます.

あなたにとって最善の方法が何であるかはわかりません。コメントで明らかになった詳細から、問題のある文字は非改行スペース、ASCII 160 のようです。その文字が文字列の末尾にある場合、その文字を破棄したいと考えています。おそらく、そのような状況で非改行スペースの前にある通常のスペース文字も破棄したいでしょう。ただし、文字列の他の場所に改行しないスペースが存在する場合は、それらを保持する必要があります。

さらに、Access テーブルに格納されている既存のデータと、VBScript のスクレイピング プロシージャで収集された新しい着信データに対して、これを実行する必要があるようです。VBScript から、クエリはカスタム VBA 関数または関数を使用できませんReplace()。したがって、スクレイピングコードを見ずに、新しいデータについて何を言うべきかわかりません. 既存のデータについては、質問で提案したものと同様のステートメントを使用できますUPDATE。これは、VBScript または Access セッション内から機能するはずです。

UPDATE YourTable
SET your_string = Left(your_string, Len(your_string) -1)
WHERE Asc(Right(your_string, 1)) = 160;

末尾の改行なしスペースの前にあるスペースも破棄したい場合は、 を組み込みTrim()ます。

UPDATE YourTable
SET your_string = Trim(Left(your_string, Len(your_string) -1))
WHERE Asc(Right(your_string, 1)) = 160;
于 2013-04-01T05:50:33.300 に答える