• ベストアンサー

文字列の比較がうまくいきません。

$j = M; #"M"にしてもかわりませんでした。 $a = $line[5]; #CSVからの読み込みデータです。Mが格納されています。 ここで if($j == $a){ 内容 } とすると比較が偽となり「内容」が表示されません。演算子を!=としたら「内容」が表示されます。 ためしにifの前に print "$j"; print "$a"; としてみるとMMと表示されるといった感じです。 すみませんが助言をお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.3

$j = "M"; $a = trim($line[5]); で比較しても駄目でしょうか?

yamasan0829
質問者

お礼

おお、その方法でいけました! 大変助かりました。ありがとうございました<(_ _)>

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

> $jと$aは同じ そうですよね。 では、もともとお書きになっていたスクリプトと当方が提示したのとは、 どこが違っていたのでしょうか?

yamasan0829
質問者

お礼

$aの部分にどうも改行が含まれているようです。 CSVファイルを "a","b","内容" "c","d","内容2" のようにしてみましたが今度は "M"Mと表示されてしまいます。 うーむ、どうすればよいものか・・

yamasan0829
質問者

補足

CSVファイルの読み込み方法に問題があったようです。 foreach ($lines as $l) { $line = explode(",",$l); $a = $line[5]; } なのでしゃくですがCSVファイルを以下のように変更しました。 "a","b","内容", "c","d","内容2", これでなんとか成功しました。ありがとうございました。 読み込み方法を学ばないと・・

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

以下のスクリプトを実行したとき、結果はどうなりますか? <?php $line = "abcdeMxyz"; $j = "M"; $a = $line[5]; print "$j<br />"; print "$a<br />"; if ($j == $a) {   print '$jと$aは同じ'; } else {   print '$jと$aは異なる'; } ?> (注)インデントのため、全角空白を使っています。

yamasan0829
質問者

お礼

ありがとうございます。 M M $jと$aは同じ と出ました!

yamasan0829
質問者

補足

このプログラムを見ていたらエラー原因が出てきそうです。 CSVファイルは a,b,内容 b,c,内容2 みたいになっているのですが改行まで内容に含まれているのかもしれません・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列比較

    文字列比較演算子で~の文字列の中に~が含まれていれば真を返すという下記のようなサンプルを作ったのですが、「ソ」「タ」「ゼ」「ー」の4文字だけ比較することができませんでした。エラーは 「ソ」 Unrecognized character \x94 at untitled2.pl line 5. 「タ」 エラーなし。ただし比較せず。 「ゼ」 Unmatched [ in regex; marked by <-- HERE in m/ゼ <-- HERE / at untitled2.pl line 4. 「ー」 Unmatched [ in regex; marked by <-- HERE in m/ー <-- HERE / at untitled2.pl line 4. と表示されましたのですが、これは上記の4文字に関しては部分比較することができないのでしょうか? それとも別の方法があるのでしょうか?どなたかご指導のよろしくお願いします。 環境はWindowsXP、ActivePerl、Httpdです。 ************************ $words1 = "アイウカキクスセソタチツゼー" ; $compare = "タ" ; if( $words1 =~ /$compare/ ){ print "比較対象文字が含まれています。\n" ; } else{ print "比較対象文字は存在しません。\n" ; }

    • ベストアンサー
    • Perl
  • 文字列の比較について

    BufferedReaderでファイルを読んだのちに、見出しの文字列をカンマで分割して 文字列を比較しようとしています。 ですが、分割すると、文字列が別な文字コードによる表記に変わってしまいます。 なぜでしょうか? また、解決方法などのヒントなどあれば教えてください。 BufferedReader buffReader = new BufferedReader( new FileReader("/home/masa/Desktop/Sample.csv")); String s; int ini=0; int wamei=0; int i=0; while((s = buffReader.readLine())!= null){ String[] str = s.split(",", -1); //System.out.println(s); if (i == 0) { for(int j=0; j<str.length;j++){ System.out.println(String.toString(str)); if(str.equals("五十音")){ini = j;} System.out.println("五十音"+ini); if(str.equals("a")){wamei = j;} System.out.println("和名"+wamei); //System.out.println(j); } } i++;

    • ベストアンサー
    • Java
  • 文字列比較がどうしてもできません。

    いつもお世話になっております。 現在、Perlの練習を兼ねてCGIによる簡単なスクリプトを作っています。 内容としては、フォームに入力された値を、『name.log』ファイルに書いてある値(名前一覧)を参照して、『hikaku.cgi』で比較し、 一致しなければ、『hikaku.cgi』が「名前がありません」という言葉を返す、というものです。 一応、505エラー等は起きていないのですが、どうしても文字列同士の比較ができないので、投稿しました。 各ファイルはこのような内容です。 『name.log』(604) takeshi masako-nisimura teru009 ....以下、10種ほど似たような物 『hikaku.cgi』(705) #! /usr/local/bin/perl $file = 'name.log'; $sain = 0; #フォームから値を取得する部分(省略) $ck = $FORM{'namae'}; open(DB,$file); @HIKAKU2 = <DB>; close(DB); print "Content-type: text/plain\n\n"; foreach $i (@HIKAKU2) { if($i eq $ck) { $sain++; } } if ($sain != 1) { print "名前がありません"; } __END__ こちらの考えでは、name.logの中で同じ名前はないので、$sainには1しか入らず、 したがって、名前がなかった場合は「名前がありません」が表示されるはずなのですが、どうもそれがうまく動きません。 一応、$sainとフォームデータの$ckがどうなっているか、printで表示させてみたのですが、 $sainは0、$ckは入力したフォームの値がきちんと反映されていました。 初心者ですので、間違ったところが多々あると思いますが、どなたか回答いただけると幸いです。

    • ベストアンサー
    • CGI
  • VBSにてCSV読み込みし比較

    ある場所に比較するCSVファイルを2個格納しております。 ただしCSVファイル名は可変であります。 その場合 Set objTextA = objFSO.OpenTextFile("C:\" & "A.csv")と特定して呼び出せません。 名前が可変なときのため、そのパスにあるCSV2個を順に呼び出すにはどうすればよいのでしょうか。 また呼出し後、split関数により、配列に入れます。A配列とB配列に格納したとします。 一つ一つ比較していきたいのですが、 以下のような構文の場合、比較で違ったときテキストに書き込みとなりますでしょうか? for i=0 to i=10 step 1 if strcomp(a(i) ,b(i))) = 1 then テキストに書き込み endif next

  • 文字列の比較について

    はてなアンテナのような機能をPHPで作りたいです。 http://a.hatena.ne.jp/ 特定のサイトを定期的に巡回し、更新されて部分(文字)だけ表示させる。 AとBを比較し差分(更新された部分だけ)をとる方法が分かりません。 A = 更新以前の内容 B = 更新後の内容 どのような方法があるのでしょうか?

    • 締切済み
    • PHP
  • perlでのcsvファイルの比較・上書き

    はじめまして、今回初めて質問させていただきます。 今、perlでAとBという2つのCSVファイルを比較して、マッチしない箇所がある場合はAの情報がBに上書きされるというスクリプトを作成しようとしています。 OPEN関数と比較演算子を利用するのはわかっているのですが、上書きさせる方法がわかりません... ネットで調べたりしたのですが、参考になるHPがなかなか見つからなかったので、こちらに質問させていただきました。 サンプルとなるプログラムやHP等を教えていただければ、勉強になりますのでとても助かります。 よろしくお願いします。 追記 Bのcsvファイルには住所録情報が格納されておりまして、AのcsvファイルにはBの住所録情報の中から変更箇所がある新しい住所録情報が格納されております。

  • VBScriptでの整数型価格データの比較演算

     VBScriptで簡単な価格比較のプログラムを作りました。文字型で価格データが格納されていて、その価格の大小を比較するものです。私は下記のように書きましたが、どうも正しく演算されていない場合があるようです。 if CDbl (Price1) < CDbl (Price2) then  比較の内容は日本円なので整数です。上記の演算がもしも適切でない場合はどのようにすれば適切かをお教え頂ければ幸いです。適切である、というご回答でも構いません。  よろしくお願いします。

  • A列文字とE列文字を比較してG列に判定を出力する

    エクセルマクロ初心者です。 A列に入力されている文字とE列に入力されている文字を比較して、G列に判定を出力(一致:K 不一致:F)するマクロを考えています。 StrComp関数が返す戻り値を利用して StrComp(Cells(j, 1), Cells(j, 5), vbTextCompare) というのを使って比較しようとしましたが、これだと同じ行を参照してしまいます。 A列の方が入力されている行が少ない(例えば:A列は1から10行、E列は1から1000行)ので、A列を基準にE列を比較し、A列が空白行に移った段階で処理を止めたいと思います。 以下に途中まで考えたものを載せます。 j = 1 For j = 1 To Cells(Rows.Count, "E").End(xlUp).Row Cells(j, 10) = StrComp(Cells(j, 1), Cells(j, 5), vbTextCompare)    If Cells(j, 10).Value = 0 Then    Cells(j, 7).Value = "K"    Else    Cells(j, 7).Value = "F"    End If Next j ご教示の程、お願いします。

  • Open Office calc 文字の比較

    Open Office org calcにて文字の比較をしたいです。 具体的には セルA4に 日 とあれば3を セルA4に 月 とあれば3を セルA4に 火 とあれば0を   ・   ・   ・ という様に各曜日毎に決まった数字を表示させたいです。 パターンが7つしかないのでIF関数で入れ子にしてやろうと思ったのですが 比較演算子が == とか eq とか上手く使えません。 他にやり方はありますでしょうか? セルを2つ用意してEXACT関数というのを使えば出来ますか?

  • 文字列を比較

    文字列を比較して 一つでも一致したらファイルに書き込まず抜ける 一つも一致しなかった場合一度書き込んで抜けるという操作を 下記のコードで実現したいんですけど、 "cPid[n] = cStoRegiAdd; for(j = 0;j < MAX;j++){ if(cPid[n] != cRegiTab[j]){ iflag = 1; } } if(iflag == 1){ fprintf(fh,"#define %s 0\n",cStoRegiAdd); }" の部分で何かおかしいとこはありますか?? もしあれば教えていただきたいんですけど?? #include<stdio.h> #include<string.h> #include<stdlib.h> #define MAX 1024 char *cRegiTab[MAX]; // 文字列登録表 int n = 0; int main() { rightsidehfunction(); leftsidehfunction(); } /* 左辺の値をとって.hファイルに書き込む関数 */ int leftsidehfunction() { FILE *ft; FILE *fh; char buf[MAX]; char buf1[MAX]; char *cPid[MAX]; char *cWorkRegiAdd; char *cStoRegiAdd; int istr = 0; int k; char *p; char *q; int s; int i; int j; int iflag = 0; ft = fopen("test.txt","r"); fh = fopen("test.h","a+"); if (fh == NULL || ft == NULL) { printf("ファイルを開けません。\n"); return 1; } /* ファイルを1行ずつ読み込む処理 */ while (fgets(buf, sizeof buf, ft) != NULL){ cWorkRegiAdd = strtok(buf, "="); for(k = 0;k < n;k++){ if(*cPid[k] != *cWorkRegiAdd)continue; if(strcmp(cPid[k],cWorkRegiAdd) == 0)break; } if(k < n) continue; cStoRegiAdd = malloc(strlen(cWorkRegiAdd) + 1); strcpy(cStoRegiAdd,cWorkRegiAdd); cPid[n] = cStoRegiAdd; for(j = 0;j < MAX;j++){ if(cPid[n] != cRegiTab[j]){ iflag = 1; } } if(iflag == 1){ fprintf(fh,"#define %s 0\n",cStoRegiAdd); } n++; } fclose(fh); fclose(ft); return 0; } /* 右辺の値をとって.hファイルに書き込む関数 */ int rightsidehfunction() { FILE *ft; // 入力ファイルポインタ FILE *fh; // 出力ファイルポインタ int c; //読み込み文字 char buf[MAX]; //バッファ領域 char buf1[MAX]; char cPid[MAX]; // 採取したPID char *cWorkRegiAdd; // 採取文字列作業域アドレス char *cStoRegiAdd; // 文字列格納域アドレス int iflag = 0; // 0/1; 右/左のクオート int ichs = 0; // chrの文字数 int istr = 0; // strの文字数 int k; // ntrの探索index int iOid; //OID char *p; ft = fopen("test.txt", "r"); fh = fopen("test.h", "w"); if (fh == NULL || ft == NULL) { printf("ファイルを開けません。\n"); return 1; } //ファイルを1文字ずつ読み込む while ((c = fgetc(ft)) != EOF) { switch (c) { case '"': iflag = 1 - iflag; /*右のクオート*/ if (iflag == 0) { cPid[ichs] = '\0'; cWorkRegiAdd = cPid; for(k = 0;k < istr;k++){ if(*cRegiTab[k] != *cWorkRegiAdd) continue; if(strcmp(cRegiTab[k],cWorkRegiAdd) == 0) break; } if(k == istr){ cStoRegiAdd = malloc(strlen(cWorkRegiAdd) + 1); strcpy(cStoRegiAdd,cWorkRegiAdd); cRegiTab[istr] = cStoRegiAdd; istr++; fprintf(fh, "#define %s 0\n", cStoRegiAdd); } ichs = 0; } break; case '\n': if (iflag == 1) { cPid[ichs] = '\0'; iflag = 0; } ichs = 0; break; default: if (iflag == 1) { cPid[ichs] = c; if (ichs < MAX - 1){ ichs++; } } break; } } /* ファイルの最後が改行じゃなかった場合 */ if (ichs>0) { cPid[ichs]='\0'; } fclose(ft); fclose(fh); return 0; }