[英]String parsing using strtok in C
我想逐行讀取.csv
文件,然后檢查我的行的第一個單詞是否與string_1
匹配。 如果匹配,那么我還想檢查第二個字是否與string_2
匹配。 我的.csv
文件包含三個字段,即用戶,密碼和類型。 到目前為止,這是我的代碼:
void verify ( char *user, char *password ) {
FILE *data;
char verifyUser[50];
data = fopen( "password.csv", "r+" );
while ( fgets(verifyUser, 50, data ) != NULL) {
char *ptr;
ptr = strtok(verifyUser, ", ");
/***What do I do here?***/
}
fclose(data);
}
在這種情況下, user
和password
分別是string_1
和string_2
。 有小費嗎? 我可以使用strtok
將我的行分成三個子串,然后對它們執行strcmp
嗎? 如果是這樣,我該怎么做?
這些方面的內容怎么樣:
ptr = strtok(verifyUser, ", ");
if (!ptr || strcmp(ptr, user))
continue;
/* Okay, so the user matches. */
char *pass = strtok(NULL, ", ");
if (!pass || strcmp(pass, password)) {
/* Invalid. */
break;
}
當然,此代碼假定您已經信任字符串user
和password
並且它也未經測試。
我不想聽起來很迂腐但是當你打開一個文件時,你應該添加一個if
來測試文件是否可以打開。 就像是:
if ( ( data = fopen( "password.csv", "r+" ) ) != NULL ){
printf( "The file couldn't be opened" );
}
else{
.
.
.
}
或者至少要注意的是,如果無法打開文件來跟蹤問題。
您遇到的最大問題是strtok(verifyUser, ", ")
將在逗號和空格上分割輸入行,因此如果您的任何字段包含空格(例如真實姓名),它們將被拆分為多個字段。
使用strtok
的常用方法是循環:
for (token = strtok(inputLine, ","); token; token = strtok(0, ",")) {
/* do something with token */
首先,你不是逐行讀取它。你正在將50個字符復制到verifyUser
所以它的工作時間不得超過緩沖區大小(50)
。 fgets(verifyUser,50,數據)
readline使用這樣的東西......
getline(data, yourVariable, '\n');
然后你可以做的..
ptr = strtok(yourVariable, ", ");
// now u have to iterate through `ptr` to get all the sub-strings(split-ed using parameter ',')
while(ptr !=NULL){
if(strcmp(ptr, user)){
// do stuff here like `break;` etc
}
}
順便說一句,如果你做錯誤檢查就好了...就像fopen()
失敗一樣(那么你不應該運行其余的代碼..)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.