Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];
Внизнайти 6 одинаковых чисел в строке Найти похожие ветки
← →
Garacio © (2007-02-03 07:44) [0]Очень нужен совет:
В текстовый файл записывается отчёт о работе базы данных. Если никаких ошибок не было, то в последней строке этого файла среди многочисленных записей будет 6 одинаковых чисел. Тут могла бы помочь функция pos, но я не знаю – какие это будут числа (количество записей в БД постоянно меняется)!
Помогите решить эту головоломку!
← →
Virgo_Style © (2007-02-03 07:54) [1]Например,
type
NumAndCount = record
Count: Integer;
Number: Integer;
end;
var
Numbers: array of NumAndCount;
разбиваешь строку на отдельные числа и либо добавляешь новое число в массив, либо увеличиваешь счетчик. После разбора смотришь на количество полученных чисел.
← →
Garacio © (2007-02-03 08:13) [2]Возможно, это существенно: все 6 чисел стоят подряд (через пробел). При таком «раскладе» реально ли написать что-то вроде «маски» (‘# # # # # #’) для той-же функции pos?
И остаётся ещё вопрос: как перейти в последнюю строку текстового файла?
← →
Garacio © (2007-02-03 08:33) [3]разбиваешь строку на отдельные числа и либо добавляешь новое число в массив, либо увеличиваешь счетчик. После разбора смотришь на количество полученных чисел
А ссылку на пример не могли бы оставить?
← →
PZ (2007-02-03 08:35) [4]
Var
List : TStringList;
S : String;
List := TStringList.Create;
List.LoadFromFile("Text.txt");
S := List.String[List.Count-1]); // Последняя строка
← →
Garacio © (2007-02-03 09:07) [5]Спасибо, PZ ! Одним вопросом меньше
← →
ЮЮ © (2007-02-03 09:31) [6]
> какие это будут числа (количество записей в БД постоянно
> меняется)!
Если не знаешь сами числа, вычисляй разницу. Должен получить 5 нулей. :)
← →
Garacio © (2007-02-03 09:45) [7]вычисляй разницу
Разницу между чем, если эти числа находятся где-то в строке?
Тут, действительно, либо надо разбивать строку, сравнивать полученные значения и проверять колличество (=6 ?), либо использовать маску (если это возможно)
← →
ЮЮ © (2007-02-03 09:55) [8]
> Возможно, это существенно: все 6 чисел стоят подряд (через
> пробел). При таком «раскладе» реально ли написать что-то
> вроде «маски» (‘# # # # # #’) для той-же функции pos?
А кроме чисел есть другая информация в этой строке? А в других строках такой же фомат информации?
← →
Garacio © (2007-02-03 10:06) [9]А кроме чисел есть другая информация в этой строке?
Да, причём не только числа.
А в других строках такой же фомат информации?
Нет.
← →
Virgo_Style © (2007-02-03 10:11) [10]выцепил очередное число, сравнил с предыдущим, если равно - увеличил счетчик, если нет - счетчик сбросил. Сохранил очередное для последующего сравнения.
Если счетчик равен 5 - значит, уже 6 чисел равны между собой.
← →
ЮЮ © (2007-02-03 10:14) [11]Тогда к каждой строке 6-ти кратный раз Read в строковую переменную с последующим StrToIntDef и вычислении разности с предыдущим числом.
Garacio © (03.02.07 09:07) [5]
Грузить в память весь лог из-за одной строки? Размер лога большой?
← →
ЮЮ © (2007-02-03 10:15) [12]6-ти кратный раз = 6-ти кратный цикл с break-ом
← →
Garacio © (2007-02-03 11:41) [13]В Nete нашёл статью с примером:
function GetWords(const S: string; L: TStrings; Delimiters: TSysCharSet): integer;
Буду пытаться реализовать: "выцепил очередное число, сравнил с предыдущим, если равно - увеличил счетчик, если нет - счетчик сбросил"
Если что, ещё раз обращусь!
← →
Garacio © (2007-02-03 11:49) [14]Стоп! Ещё такой вопрос:
Можно как-нибудь учесть ["0".."9"] этом поиске:function GetWords(const S: string; L: TStrings; Delimiters: TSysCharSet): integer;
var len, idx1, idx2: integer;
begin
Result := 0;
if Length(S) = 0 then Exit;
L.Clear;
len := Length(S);
idx2 := 1;
repeat
while (idx2 <= len) and (S[idx2] in Delimiters) do inc(idx2);
idx1 := idx2;
if (idx2 <= len) and not (S[idx2] in Delimiters) then
while (idx2 <= len) and not(S[idx2] in Delimiters) do inc(idx2);
if idx1 < idx2 then
L.Add(Copy(S, idx1, idx2-idx1));
until idx2 > len;
Result := L.Count;
end;
← →
JFK&MM_extramarital_son (2007-02-03 12:19) [15]С помощью регулярных выражений задача решается в две - три строчки.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c