Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2016, 04:36   #11
Kostya12
Пользователь
 
Регистрация: 29.09.2016
Сообщений: 29
По умолчанию Сортировка.

Всё запустилась,но тут меня настигла другая беда. Получается у меня Delphi изначально сравнивал массив с edit ,что там написано и выводил значения,но теперь ему НЕ нужно сравнивать edit. Теперь нужно массив с ячейками сравнивать ну или как-то так,чтобы найти повторы. Вопрос как это сделать?
Kostya12 вне форума Ответить с цитированием
Старый 30.09.2016, 12:31   #12
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
Grid.RowCount:=2; //по умолчанию 2 строки
    Grid.ColCount:=c;
     sl:=TStringList.Create; //мы его только заполняли, НО никак не использовали и в дальнейшем не будем
     //заполняем шапку таблицы (наименование полей)
    for i:= 1 to c do BEGIN
          Grid.Cells[i-1,0]:= sheet.cells[1,i];


    //считываем значение из каждой ячейки и проверяем на совпадение по 3 столбцу (Номер документа)
     for j:= 1 to r do
        //собственно сравниваем наш критерий со значением в Excel
        //функция trim убирает все лишние пробелы в строке т.е. пробелы перед и после текста
        //функция lowercase возвращает строку в нижнем регистре. uppercase - в верхнем регистре

        v1:=trim (lowercase(sheet.cells[j,4]));
        v2:=trim (lowercase(sheet.cells[j,8]); //все что нам сейчас нужно от Excel это проверяемые величины 

         if (v1=trim(lowercase(criterion1)) or (v2=trim(lowercase(criterion2)) then
            begin
            //если значения совпали то заносим его в таблицу grid. Не забываем что в объекте Excel нумерация строк и столбцов в Excel 1, в Grid c 0
               for i:= 1 to c do
                  Grid.Cells[i-1,grid.RowCount-1]:= sheet.cells[j,i];
if sl.IndexOf(sheet.cells[j,i])>-1 then //увеличить на 1
else sl.add(sheet.cells[j,i])//добавили строку


            grid.RowCount:=grid.RowCount+1; //добавляем пустую строку в grid.
            end;// ЭТО было

// А теперь ищем нужные нам величины (v1, v2) в нашей таблице Grid
  rowisfind:=-1; //вначале считаем что нужного там нет
  for jjjjjjj:=0 to grid.rowcount-1 do // а теперь надо пройти по всем заполненым строкам grid чтобы узнать а нет ли там того что нам нужно
    if (grid.cells[jjjjjjj,1]=v1) and (grid.cells[jjjjjjj,2]=v2) then begin //кажется нашли
     rowisfind:=jjjjjjj;// запомним на какой строке 
     break;// дальше искать незачем 
    end;
  
  // а теперь зная результат поиска (rowisfind)
  if rowisfind >=0 then begin //в случае найденного дубля на rowisfind строке grid
  ....
  end
  else begin // и что если такой строки не нашли
  ....
  end;


            END;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.09.2016 в 12:36.
evg_m на форуме Ответить с цитированием
Старый 03.10.2016, 05:07   #13
Kostya12
Пользователь
 
Регистрация: 29.09.2016
Сообщений: 29
По умолчанию

То есть это с этим кодом всё получится? У меня вот такая проблема, несовместимы типы string и integer.
Изображения
Тип файла: jpg Безымянный7.jpg (98.0 Кб, 108 просмотров)
Kostya12 вне форума Ответить с цитированием
Старый 03.10.2016, 09:10   #14
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
var v1, v2: integer; string;
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 03.10.2016, 09:31   #15
Kostya12
Пользователь
 
Регистрация: 29.09.2016
Сообщений: 29
По умолчанию

Всё равно ошибка,может C заменить?
Код:
procedure Xls_Open_filter(XLSFile:string; Grid:TStringGrid; criterion1,criterion2:string);
 const
  xlCellTypeLastCell = $0000000B;
var
  ExlApp, Sheet: OLEVariant;
  i, j, r, k, v1, v2:  string;
  sl:TStringlist;


begin

     //создаем объект Excel
  ExlApp := CreateOleObject('Excel.Application');

  //делаем окно Excel невидимым
  ExlApp.Visible := false;

  //открываем файл XLSFile
  ExlApp.Workbooks.Open(XLSFile);

  //создаем объект Sheet(страница) и указываем номер листа (1)
  //в книге, с которого будем осуществлять чтение
  Sheet := ExlApp.Workbooks[ExtractFileName(XLSFile)].WorkSheets[1];

  //активируем последнюю ячейку на листе
  Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

    // Возвращает номер последней строки
    r := ExlApp.ActiveCell.Row;

    // Возвращает номер последнего столбца
    c := ExlApp.ActiveCell.Column;

    //устанавливаем кол-во столбцов и строк в StringGrid

    Grid.RowCount:=2; //по умолчанию 2 строки
    Grid.ColCount:=c;

     //заполняем шапку таблицы (наименование полей)
    for i:= 1 to c do BEGIN
          Grid.Cells[i-1,0]:= sheet.cells[1,i];


    //считываем значение из каждой ячейки и проверяем на совпадение по 3 столбцу (Номер документа)
     for j:= 1 to r do
        //собственно сравниваем наш критерий со значением в Excel
        //функция trim убирает все лишние пробелы в строке т.е. пробелы перед и после текста
        //функция lowercase возвращает строку в нижнем регистре. uppercase - в верхнем регистре
           v1:=trim (lowercase(sheet.cells[j,4]));
           v2:=trim (lowercase(sheet.cells[j,8]); //всё что нам сейчас нужно от  Excel это провреяемые велечины
         // А теперь ищем нужные нам велечины (v1, v2) в нашей таблице Grid
  rowisfind:=-1; //вначале считаем что нужного там нет
  for jjjjjjj:=0 to grid.rowcount-1 do // а теперь надо пройти по всем заполненым строка grid чтобы узнать а нет ли там того что нам нужно
    if (grid.cells[jjjjjjj,1]=v1) and (grid.cells[jjjjjjj,2]=v2) then begin //важется нашли
     rowisfind:=jjjjjjj;// запомним на кокой строке
     break;// дальше искать незачем
    end;
     // а теперь зная результат поиска (rowisfind)
  if rowisfind >=0 then begin //в случае найденного дубля на rowisfind строке grid
  ....
  end
  else begin // и что если такой строки не нашли
  ....
  end;
            END\;
            sl.Free;
 //закрываем приложение Excel
 ExlApp.Quit;

 //очищаем выделенную память
 ExlApp := Unassigned;
 Sheet := Unassigned;

end;
Изображения
Тип файла: jpg Безымянный8.jpg (103.3 Кб, 123 просмотров)
Kostya12 вне форума Ответить с цитированием
Старый 03.10.2016, 10:03   #16
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
Всё равно ошибка,может C заменить?
возьмите какую-нибудь книгу, желательно чтобы это был учебник.
http://programmersforum.ru/showthread.php?t=14054
http://www.programmersclub.ru/book/
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 03.10.2016, 10:06   #17
Kostya12
Пользователь
 
Регистрация: 29.09.2016
Сообщений: 29
По умолчанию

Я в принципе и так понимаю в чём ошибка,просто совета спрашиваю по её устранению.
Kostya12 вне форума Ответить с цитированием
Старый 03.10.2016, 11:03   #18
Kostya12
Пользователь
 
Регистрация: 29.09.2016
Сообщений: 29
По умолчанию

Он опять пишет,что неизвестная переменная. Что делать? Я C уже поставил в var.
Kostya12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
tstringlist sven4ik Общие вопросы Delphi 3 04.06.2013 14:01
Работа со TstringList в Delphi MaryJaneAlise Помощь студентам 4 02.12.2012 18:23
[Delphi] Считывания ID3v2 тегов из файлов хранящихся в TStringList Zilian Помощь студентам 0 22.10.2011 02:11
TStringList vasyaRyzhyi Общие вопросы Delphi 0 07.03.2011 11:01