powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сравнение 2 файлов (.xlsx) посредством Delphi
25 сообщений из 55, страница 2 из 3
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845339
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Molchandefecator,

Ветка то Delphi, думаю говорит само за себя.. Долой разговоры:) По делу подсказать сможешь что?
Не зная всей задачи, могу только ещё раз предложить описанное сделать средствами самого Excel
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845349
Molchan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё,

Копаю в сторону массивов..
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845355
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а пра чо топег?
а хто аффтар?

(С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845374
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molchanёёёёё,

Копаю в сторону массивов..
Каких нах.. массивов?
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845375
Molchan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёёMolchanёёёёё,

Копаю в сторону массивов..
Каких нах.. массивов?

как подсказал x1ca4064
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845378
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molchan,

ну, копай. Солнце еще высоко.
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845379
Molchan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё,

У кого как..
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845381
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DiffEngineX
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845389
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёMolchan,

пробегаешься по первой табличке, берешь текстовое представление каждой строки, помещаешь его в словарь. В качестве ключа используешь строку, в качестве значения - "ничего".

Затем пробегаешься по второй табличке, также берешь текстовое представление каждой строки и проверяешь наличие ее в словаре.
Только если надо не учитывать регистр при сравнении, то приводить все склеенные строки к единому регистру.
А так плюсую, процедуры умножения множеств на строках и таких объемах надо делать через хеши
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845421
Molchan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Василий 2,

А можно поподробней? как реализовать
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845425
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molchan...А можно поподробней? как реализовать
Что именно "поподробней", конкретно.
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845429
Molchan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё,

я так понял что, берем колонку первой таблицы которую надо сравнить, грузим в память. Потом каждое значение проверяем есть ли в памяти? Верно?
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845434
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molchanёёёёё,

я так понял что, берем колонку первой таблицы которую надо сравнить, грузим в память. Потом каждое значение проверяем есть ли в памяти? Верно?

Где тут слово "колонка" и "грузим в память":

ёёёёёMolchan,

пробегаешься по первой табличке, берешь текстовое представление каждой строки, помещаешь его в словарь. В качестве ключа используешь строку, в качестве значения - "ничего".

Затем пробегаешься по второй табличке, также берешь текстовое представление каждой строки и проверяешь наличие ее в словаре.
- ???
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845436
Molchan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё,

Можешь подробно объяснить?! Не все такие крутые программисты как ты, сказал же, что я недавно начал только программировать на делфи...
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845461
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.08.2019 15:42, Molchan пишет:
> Можешь подробно объяснить?! Не все такие крутые программисты как ты, сказал же, что я недавно начал только программировать на делфи...

зачем?
есть готовое решение.
я тебе уже сказал как оно называется.

зы: обучаю аппендэктомии (trans tonsils) по переписке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845465
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molchanёёёёё,

Можешь подробно объяснить?! Не все такие крутые программисты как ты, сказал же, что я недавно начал только программировать на делфи...

1. Открываем первую табличку.
2. Построчно из первой таблички заносим данные в структуру, которая позволяет быстро-быстро найти строку. Так как ты про словари не слышал, используем, например, сортированный TStringList.
3. Открываем вторую табличку. Построчно проверяем наличие данных в структуре TStringList.

Важно: преобразование строки таблички в строку Delphi (string). Как это делать - знаешь только ты. Например, нужно учитывать формат, или пустые ячейки и т.д.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var
  fSL: TStringList;
  fUR: OleVariant;
begin
  memMain.Lines.Clear;
  if not FileSExist([edFName1.Text, edFName2.Text]) then Exit;
  fSL := TStringList.Create;
  try
    LoadData(fSL, edFName1.Text); // Загрузка данных из первой таблички
    fSL.Sorted := True;
    fSL.Duplicates := dupIgnore;
    TestData(fSL, edFName2.Text); // Проверка данных
  finally
    fSL.Free
  end;
end;
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845467
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Загрузка данных:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
var
  fEXL: OleVariant;
  fRow: OleVariant;
  fStrCell: string;
  fStrRow: string;
  fUR: OleVariant;
  fWS: OleVariant;
  i: Integer;
  j: Integer;
begin
  fEXL := CreateOleObject('Excel.Application');
  fEXL.Visible := False;
  fEXL.Workbooks.Open(aFileName);
  fWS := fEXL.Worksheets[1];
  fUR := fWS.UsedRange;
  for i := fUR.Row to fUR.Rows.Count do begin
    fStrRow := '';
    fRow := fUR.Rows[i];
    for j := fRow.Column to fRow.Columns.Count do begin // Следующие две строки определяют, какие данные для тебя важны для сравнения
      fStrCell := fRow.Columns[j].Text;
      fStrRow := fStrRow + '|' + QuotedStr(fStrCell);
    end;
    aSL.Add(fStrRow);
  end;
  fEXL.Quit;
  fEXL := Unassigned;
end;
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845468
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверка данных:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
var
  fEXL: OleVariant;
  fRow: OleVariant;
  fStrRow: string;
  fUR: OleVariant;
  fWS: OleVariant;
  i: Integer;
  j: Integer;
begin

  fEXL := CreateOleObject('Excel.Application');
  fEXL.Visible := False;
  fEXL.Workbooks.Open(aFN);
  fWS := fEXL.Worksheets[1];
  fUR := fWS.UsedRange;
  for i := fUR.Row to fUR.Rows.Count do begin
    fStrRow := '';
    fRow := fUR.Rows[i];
    for j := fRow.Column to fRow.Columns.Count do
      fStrRow := fStrRow + '|' + QuotedStr(fRow.Columns[j].Text); // Анал огично.

    if aSL.IndexOf(fStrRow) >= 0 then
      memMain.Lines.Add(Format('data exists, row=%d', [i]))

  end;

  fEXL.Quit;
  fEXL := Unassigned;

end;
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845469
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проект.
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845470
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использование TStringList чревато засиранием памяти в случае огромного исходного файла. Поэтому следует использовать словари, которые не хранят исходный ключ.
Сортировать TStringList лучше (по скорости) перед проверкой данных.
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845474
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.08.2019 17:01, ёёёёё пишет:
> Использование TStringList чревато засиранием памяти в случае огромного исходного файла.
> Поэтому следует использовать словари, которые не хранят исходный ключ.
> Сортировать TStringList лучше (по скорости) перед проверкой данных.

"папа, а ты с кем сейчас разговаривал?" (С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845541
figli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нафига дельфи? можно или через сам эксель на ВБ проверить, или еще проще(если знаком с mssql) написать один запрос через OPENQUERY
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845560
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
figli,

Не трогай сиквел!
Пусть в Аксес валит,
если Екселя не хватит.
Задача мелковата.
Дельфя тут не причём!
И все две станицы - вата.
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845619
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
figliнафига дельфи? можно или через сам эксель на ВБ проверить, или еще проще(если знаком с mssql) написать один запрос через OPENQUERY
Кто его знает какие, какие критерии сравнения.
Какие настройки безопасности - может, доступ к vba заарыт намертво.
Может, тс вообще все наврал.
...
Рейтинг: 0 / 0
Сравнение 2 файлов (.xlsx) посредством Delphi
    #39845656
Фотография Мигалка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё можно через адо. в дельфе не делал, а вот в вба
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
    Dim sCon$, cn As Object
    Dim finalRow&, lCount&, sSQL$
    Set cn = CreateObject("ADODB.Connection")
    cn.Mode = adModeReadWrite
    Select Case CLng(Split(Application.Version, ".")(0))
    Case Is < 12
        sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName _
             & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
    Case Is >= 12
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName _
             & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
    End Select

    cn.Open sCon
                                           
    Dim SheetResult As Worksheet
    Dim SRName As String
    SRName = "Результат"
    If Sh_Exist(ActiveWorkbook, SRName) Then
      Set SheetResult = ActiveWorkbook.Sheets(SRName)
      SheetResult.Delete
    End If
    Set SheetResult = ActiveWorkbook.Sheets.Add(, ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count))
    SheetResult.Name = SRName
    
    Dim rs02 As Object

    sSQL = "SELECT " _
         & "  [Фамилия Имя Отчество], [ИНН-КПП], [Дата регистрации], " _
         & "  instr([Фамилия Имя Отчество], ' ') as frst, " _
         & "  instr(mid([Фамилия Имя Отчество],instr([Фамилия Имя Отчество], ' ')+1,100), ' ') as scnd, " _
         & "  instr([ИНН-КПП], '-') as innkpp, " _
         & "  instr([Дата регистрации], '.') as dd,  " _
         & "  instr(mid([Дата регистрации],instr([Дата регистрации], '.')+1,100), '.') as mm " _
         & "FROM [Список А$]"
    Set rs02 = cn.Execute(sSQL)
    With SheetResult
        .Cells(2, 1).CopyFromRecordset rs02
        .Cells(1, 1).Value = "Фамилия Имя Отчество"
        .Cells(1, 2).Value = "ИНН-КПП"
        .Cells(1, 3).Value = "Дата регистрации"
        .Cells(1, 4).Value = "frst"
        .Cells(1, 5).Value = "scnd"
        .Cells(1, 6).Value = "innkpp"
        .Cells(1, 7).Value = "dd"
        .Cells(1, 8).Value = "mm"
    End With
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сравнение 2 файлов (.xlsx) посредством Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]