Помогите отсеять ненужные строки

Discussion in 'Болталка' started by palmal, 11 Jul 2010.

  1. palmal

    palmal New Member

    Joined:
    23 Jun 2010
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Нужна помощь, есть база, 10 тысяч строк.
    Каждая строка содержит дату, вида: 1210, где первые две цифры месяц, вторые год.
    Нужно каким то образом из всей базы удалить полностью строчки которые содержат уже прошедшие даты.
    то есть допустим сейчас 0710, то все строчки содержащие 0610 0510 и тп нужно снести.
    Каким образом это сделать?
     
  2. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    формат в котором хранится база?
     
  3. palmal

    palmal New Member

    Joined:
    23 Jun 2010
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    .txt
     
  4. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Покажи хотя бы одну строку как пример,потом легче будет писать программуа для этого.
     
  5. kurzza

    kurzza Member

    Joined:
    7 Dec 2009
    Messages:
    24
    Likes Received:
    16
    Reputations:
    5
    чеккером гауса. он сам expired убирает.
     
  6. palmal

    palmal New Member

    Joined:
    23 Jun 2010
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Вы о чем?


    Вот пример одной строчки
    +79267893421 18 0110 Цветы Магазин Россия 446212 ОАО 23 23 аб. ящ. N/A [email protected] Четверг
     
  7. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    http://dump.ru/file/4672694

    В current date пишешь типа:
    0710

    07 -> мес
    10 -> год

    он сортирует, если попадается 0710 дата -> он ее тоже удаляет
    (вроде как работает)
     
  8. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    Code:
    program DELerynda;
    
    {$APPTYPE CONSOLE}
    
    uses
      Windows;
    
    
      function Get2PosNext(s: string): integer;
      begin
      Result:= pos(' ', s);
      Delete(s, 1, Result);
      Result:= pos(' ', s) + Result + 1;
      end;
    
    
    
     var a, b: TextFile;
         s: string;
         Path: string;
         lpSystemTime: _SYSTEMTIME;
         Date: string;
         Year, Month: string;
         MonthI, YearI, Code: integer;
         CurrentMonth, CurrentYear: integer;
    begin
    GetSystemTime(lpSystemTime);
    CurrentMonth:= lpSystemTime.wMonth;
    CurrentYear:=  lpSystemTime.wYear;
    
    WriteLn('Enter path to file');
    Read(Path);
    AssignFile(a, Path);
    AssignFile(b, 'C:\new.txt');
    Reset(a);
    ReWrite(b);
    
    while not SeekEOf(a) do
    begin
    ReadLn(a, s);
    if s <> '' then begin //
    Date:= Copy(s, Get2PosNext(s), 4);
    Month:= Copy(Date, 1, 2);
    Year:= '20' + Copy(Date, 3, 2);
    Val(Month, MonthI, Code);
    Val(Year, YearI, Code);
    
    if CurrentYear < YearI then
    WriteLn(b, s) else
    
    if (CurrentMonth < MonthI) and (CurrentYear = YearI) then
    WriteLn(b, s);
                     end; //
    end;
    
    
    CloseFile(a);
    CloseFile(b);
    
    end.
    Вводишь путь к txt, результат будет сохранен как c:\new.txt.
    Скачать exe.
     
    #8 Faost, 11 Jul 2010
    Last edited: 11 Jul 2010
  9. palmal

    palmal New Member

    Joined:
    23 Jun 2010
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Спасибо огромное кто помог, но обе проги не правильно работают( отдают от 10к стро может 100 дай бог, якобы отсортированных, но в них все равно попадаются строки с уже просроченной датой.
    немного уточню, в каждой строчке столбцы разделяются " "(3 пробела) вот таким пробелом, дата находится в третем "столбце" надо чекать только ее, остальные данные не трогать.. может кто нибудь помочь?
     
  10. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Смотра формат дата такой DD MMYY, конечно было бы наверное легче если бы не был проблем между DD и MM.

    И еще одна вещь,может не в тему но формат дата после 2010 должен быть : DDMMYYYY
     
  11. -=us=-

    -=us=- New Member

    Joined:
    21 Oct 2009
    Messages:
    17
    Likes Received:
    3
    Reputations:
    0
    while read line; do
    if [ `echo $line|awk '{print$3}'` -le 0710 ]; then
    echo $line
    fi
    done < txt

    Это на bash, который в linux по умолчанию стоит. Если инфа не секурная могу у себя пропарсить. Если не хочешь - попроси на php написать или ставь bash или на линукс машине у кого нибудь
     
  12. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    ну так понятно что не работает, в своем посте ты привел пример, где пробел один.
    Code:
    program DELerynda;
    
    {$APPTYPE CONSOLE}
    
    uses
      Windows;
    
    
      function Get2PosNext(s: string): integer;
      begin
      Result:= pos(' ', s);
      Delete(s, 3, Result);              
      Result:= pos(' ', s) + Result + 3;
      end;
    
    
    
     var a, b: TextFile;
         s: string;
         Path: string;
         lpSystemTime: _SYSTEMTIME;       
         Date: string;
         Year, Month: string;
         MonthI, YearI, Code: integer;
         CurrentMonth, CurrentYear: integer;
    begin
    GetSystemTime(lpSystemTime);
    CurrentMonth:= lpSystemTime.wMonth;
    CurrentYear:=  lpSystemTime.wYear;
    
    WriteLn('Enter path to file');
    Read(Path);
    AssignFile(a, Path);
    AssignFile(b, 'C:\new.txt');
    Reset(a);
    ReWrite(b);
    
    while not SeekEOf(a) do
    begin
    ReadLn(a, s);
    if s <> '' then begin //
    Date:= Copy(s, Get2PosNext(s), 4);
    Month:= Copy(Date, 1, 2);
    Year:= '20' + Copy(Date, 3, 2);
    Val(Month, MonthI, Code);
    Val(Year, YearI, Code);
    
    if CurrentYear < YearI then
    WriteLn(b, s) else
    
    if (CurrentMonth < MonthI) and (CurrentYear = YearI) then
    WriteLn(b, s);
                     end; //
    end;
    
    
    CloseFile(a);
    CloseFile(b);
    
    end.
    Скачать.
     
Loading...
Similar Threads - Помогите отсеять ненужные
  1. Turanchocks_
    Replies:
    2
    Views:
    1,529
  2. skillushqa_
    Replies:
    32
    Views:
    3,641