2014-10-17 4 views
0

Хорошо, это может быть трудно объяснить.
Пароли не работают с именами пользователей.
Я читаю из текстового файла.

«имя пользователя, пароль» структура для ниже текстовый файлЧтение Из текстового файла Javascript

John,BOL12345 
Mary2,BOL77777 
Anna,BOL54321 
test,BOL12345 

Топ 3 не работают в одиночку, мне нужно только верхнюю 3
, но как только я добавить «тест, BOL12345 "
пароль BOL12345 делает работу
, но без„тест, BOL12345“пароль„BOL12345“не работает, или любой другой из них
Я делаю все это в JavaScript ниже будет приведен фрагмент кода .. пожалуйста задавайте любые вопросы, так как я не понимаю, почему это происходит.

JavaScript Ниже
«линии» = текстовый файл выше

lines = x.responseText.split("\n"); 
    for (i=0; i < lines.length; i++) 
    { 
     test1 = lines[i].split(",") 
     username.push(test1[0]); 
     password.push(test1[1]); 

    } 
    var tempUsername = document.getElementById('username').value; 
    var tempPassword = document.getElementById('password').value; 
    var arraycontainsusername = (username.indexOf(tempUsername) > -1); 
    var arraycontainspassword = (password.indexOf(tempPassword) > -1); 
    alert(password); 
    if (arraycontainsusername && arraycontainspassword) { 
     window.location.href = "listing.htm"; 
    }; 
+0

В каком-то контексте было бы неплохо ... что вы пытаетесь сделать? –

+0

Вы должны использовать indexOf, если у вас есть один и тот же пароль для нескольких пользователей, но это все еще не объясняет это. @ NicolásStraubValdivieso, что вы не понимаете? – mplungjan

+0

Получите пароли из 3 лучших, чтобы работать без наличия «test, BOL12345» в текстовом файле. –

ответ

1

Образованные догадка: ваш файл с помощью \r\n. так как вы раскалываете \n, то \r оставлен и развращает каждую строку. попробуйте разделить на \r\n и посмотреть, что произойдет. Это объясняет, почему добавление последней строки будет работать, поскольку в конце нет новой строки, в конце не будет символа конца, чтобы испортить поиск indexOf.

различные операционные системы обрабатывают текстовые файлы по-разному. Windows использует CRLF (Return Line Feed) для перехода к следующей строке, в то время как * Варианты NIX используют LF. старые версии MacOS используют CR. Ваш код предполагал, что файл пришел из среды * NIX, где LF (или \n) является нормой, когда она исходит из среды Windows, где CRLF (или \r\n) является нормой (неточно, поскольку вы можете создавать текстовые файлы с LF в окнах и CRLF в * NIX, купите, вы получите картину).

Чтобы обработать все случаи правильно, я бы рекомендовал нормализуя строку перед началом работы на нем:

x.responseText.replace(/\r\n|\r(?!\n)/g, '\n').split('\n');

, что, казалось бы, китайская строка в середине на самом деле является регулярное выражение, которое соответствует либо \ г \ п или \ r (но только тогда, когда \ r не следует \ n). таким образом вы можете заменить все ваши CRLF и CR на LF и обрабатывать текст, исходящий из любой среды.

можно упростить, что регулярное выражение из порядка лексем, в /\r\n|\r/, но я оставляю его в потому, что она иллюстрирует аккуратную концепцию (lookaheads - этот бит (?!\n) говорит, что если и только если не сразу последовал \n). С учетом сказанного /\r\n|\r/ будет работать лучше, особенно при обработке больших файлов

+1

Спасибо, что сработало. Считаете ли вы, что вы могли бы объяснить, что делает это в немного большей глубине, поэтому я могу понять, что легче для дальнейшего использования, пожалуйста, –

+0

@VaughanD ответ обновлен :) –

Смежные вопросы