現在の位置: ホーム> 最新記事一覧> CSVファイルデータを処理する際のSTRCSPN関数の実用的なヒントは何ですか?

CSVファイルデータを処理する際のSTRCSPN関数の実用的なヒントは何ですか?

gitbox 2025-09-21

strcspn関数の紹介

STRCSPN関数はPHPの文字列処理関数であり、主に文字列内の最初の指定された文字セットの位置を計算するために使用されます。この関数のプロトタイプは次のとおりです。

 <span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$mask</span></span><span> )
</span></span>
  • $文字列は、チェックする文字列です。

  • $マスクは、除外する必要があるすべての文字を含む文字列です。

STRCSPN関数によって返される値は、 $マスクの任意の文字に一致する$文字列の最初の位置です。一致しない場合、文字列の長さが返されます。

CSVファイルを操作する場合、通常、各行からデータを抽出する必要があり、CSVファイルにはデリミター(コンマやニューラインなど)が含まれることが多く、フィールドコンテンツには特殊文字または引用符が含まれる場合があります。この時点で、 StrcSPNはこれらのキャラクターを効果的に見つけて処理するのに役立ちます。

CSVファイル処理のアプリケーション

CSVファイル形式には、通常、コンマセパレーター、ラインブレーク、および引用される可能性のあるフィールドが含まれています。これらのファイルを処理する場合、セパレーターとフィールドのコンテンツを明確に区別する必要があり、 STRCSPN関数を使用してフィールド内の不規則な文字を見つけて、解析中にデータを正しく分割できるようにします。

例1:ニューラインを検出してスキップします

CSVファイルを使用する場合、NewLinesを含むフィールドまたは行をスキップする必要がある場合があります。 STRCSPNを使用して、最初のNewLineキャラクターを見つけてスキップできます。

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'data.csv'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">trim</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>);  </span><span><span class="hljs-comment">// ラインの端でラインブレークを取り外します</span></span><span>
    </span><span><span class="hljs-variable">$pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-string">"\n"</span></span><span>);  </span><span><span class="hljs-comment">// 新しい場所を見つけます</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$pos</span></span><span> &gt; </span><span><span class="hljs-number">0</span></span><span>) {
        </span><span><span class="hljs-comment">// データの処理</span></span><span>
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$pos</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
    }
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>

この例では、 STRCSPNを使用して、Newline文字の最初の位置を見つけ、次にsubstrを介してフィールドデータを抽出および処理します。

例2:コンマセパレーターをスキップします

CSVデータを処理すると、見積もりの​​フィールドに遭遇する可能性があり、フィールドコンテンツには内部にコンマが含まれている場合があります。 STRCSPNを使用すると、これらの文字をスキップし、適切な場所にデータを分割することを確認できます。

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'data.csv'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-comment">// 引用符の外側にない最初のコンマポジションを見つける</span></span><span>
    </span><span><span class="hljs-variable">$pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-string">','</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$pos</span></span><span> &gt; </span><span><span class="hljs-number">0</span></span><span>) {
        </span><span><span class="hljs-variable">$field</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$pos</span></span><span>);  </span><span><span class="hljs-comment">// 最初のフィールドを抽出します</span></span><span>
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$field</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
    }
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>

この例では、 STRCSPNは最初のコンマの位置を見つけます。これにより、CSVファイルの最初のフィールドを抽出し、セグメンテーションが誤っていないことがわかります。

例3:引用されたフィールドの処理

CSVファイルでは、フィールドにはコンマまたは他の特殊文字が含まれている場合があり、これらのフィールドが引用符に囲まれている場合、これらのフィールドが正しく解析されていることを確認する必要があります。 STRCSPNは、フィールド内の引用されていない部品の文字を見つけるために使用でき、それによりフィールドデータを正しく解析できます。

 <span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'data.csv'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">trim</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>);
    </span><span><span class="hljs-variable">$start</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
    </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$start</span></span><span> &lt; </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>)) {
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$line</span></span><span>[</span><span><span class="hljs-variable">$start</span></span><span>] === </span><span><span class="hljs-string">'"'</span></span><span>) {
            </span><span><span class="hljs-comment">// 次の引用の位置を見つけます</span></span><span>
            </span><span><span class="hljs-variable">$end</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-string">'"'</span></span><span>, </span><span><span class="hljs-variable">$start</span></span><span> + </span><span><span class="hljs-number">1</span></span><span>);
            </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$end</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
                </span><span><span class="hljs-comment">// 引用符に囲まれたフィールドを抽出します</span></span><span>
                </span><span><span class="hljs-variable">$field</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-variable">$start</span></span><span> + </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$end</span></span><span> - </span><span><span class="hljs-variable">$start</span></span><span> - </span><span><span class="hljs-number">1</span></span><span>);
                </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$field</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
                </span><span><span class="hljs-variable">$start</span></span><span> = </span><span><span class="hljs-variable">$end</span></span><span> + </span><span><span class="hljs-number">1</span></span><span>;
            }
        } </span><span><span class="hljs-keyword">else</span></span><span> {
            </span><span><span class="hljs-comment">// 次のセパレーターまたは新しいラインを見つけます</span></span><span>
            </span><span><span class="hljs-variable">$pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-string">",\n"</span></span><span>, </span><span><span class="hljs-variable">$start</span></span><span>);
            </span><span><span class="hljs-variable">$field</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-variable">$start</span></span><span>, </span><span><span class="hljs-variable">$pos</span></span><span>);
            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$field</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
            </span><span><span class="hljs-variable">$start</span></span><span> += </span><span><span class="hljs-variable">$pos</span></span><span> + </span><span><span class="hljs-number">1</span></span><span>;
        }
    }
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>

ここでは、 STRCSPNを使用してセパレーターをスキップし、見積もりフィールドを処理するときにデータを適切に分割するのに役立ちます。

要約します

STRCSPN関数は、CSVファイルデータを処理する場合に非常に便利です。これにより、ニューライン、コンマ、引用などの特定の文字を見つけてスキップし、フィールドデータを正確にセグメント化できるようにします。 Newlinesを含むフィールドを処理したり、コンマセパレーターをスキップしたりするかどうかにかかわらず、 STRCSPNは効果的なサポートを提供します。 STRCSPNを適切に使用することにより、複雑なCSVデータをより簡単に処理し、一般的な解析エラーを回避できます。