Горизонт
Основная информация
Время обучения: Суббота 11.40-13.40
Дополнительное занятие: Вторник 17.20
АрсКодер 1 месяц назад #
procedure TForm1.Button1Click(Sender: TObject);
var
Employees: TEmployeeArray;
Emp: TEmployee;
begin
Employees := LoadEmployeesFromCSV('employees.csv');
// Пример вывода в Memo или консоль
for Emp in Employees do
begin
Memo1.Lines.Add(Format('%s %s %s — %s, тел: %s, родился: %s',
[Emp.LastName, Emp.FirstName, Emp.MiddleName,
Emp.Position, Emp.Phone,
DateToStr(Emp.BirthDate)]));
end;
end;
АрсКодер 1 месяц назад #
type
TEmployee = record
LastName: string;
FirstName: string;
MiddleName: string;
Position: string;
Phone: string; // или Int64, если только цифры и без формата
Email: string;
BirthDate: TDate; // дата в формате Delphi
Address: string;
end;
TEmployeeArray = array of TEmployee;
---
uses
System.SysUtils, System.Classes, System.DateUtils, System.StrUtils;
function LoadEmployeesFromCSV(const FileName: string): TEmployeeArray;
var
CSVFile: TStringList;
i: Integer;
Fields: TArray<string>;
Emp: TEmployee;
Line: string;
begin
SetLength(Result, 0);
if not FileExists(FileName) then
Exit;
CSVFile := TStringList.Create;
try
CSVFile.LoadFromFile(FileName, TEncoding.UTF8); // Укажите кодировку, если нужно
// Пропускаем заголовок (первую строку)
if CSVFile.Count > 0 then
CSVFile.Delete(0);
for i := 0 to CSVFile.Count — 1 do
begin
Line := Trim(CSVFile[i]);
if Line = '' then
Continue;
// Разделяем строку по запятым (базовый CSV-парсинг)
// ⚠️ В реальном проекте лучше использовать полноценный CSV-парсер,
// чтобы обрабатывать запятые внутри кавычек и т.п.
Fields := SplitString(Line, ',');
if Length(Fields) <> 8 then
Continue; // Пропускаем строки с неправильным количеством полей
Emp.LastName := Fields[0];
Emp.FirstName := Fields[1];
Emp.MiddleName := Fields[2];
Emp.Position := Fields[3];
Emp.Phone := Fields[4]; // или StrToInt64Def(Fields[4], 0) — если нужен числовой тип
Emp.Email := Fields[5];
// Преобразуем дату из формата «дд.мм.гггг» в TDate
if not TryStrToDate(Fields[6], Emp.BirthDate, 'dd.mm.yyyy') then
Emp.BirthDate := 0; // или пропустить запись
Emp.Address := Fields[7];
// Добавляем в массив
SetLength(Result, Length(Result) + 1);
Result[High(Result)] := Emp;
end;
finally
CSVFile.Free;
end;
end;
АрсКодер 1 месяц назад #
Realistic photo animation of a black-and-white historical photograph. Subtle, natural motion only: gentle blinking, slight head movement, soft breathing, wind in hair or clothes — nothing exaggerated. Preserve original facial features, clothing, and background details. No fantasy elements, no colorization unless specified. Maintain vintage film grain and authentic 20th-century aesthetic. Cinematic, documentary-style, emotionally grounded.
Даниил К 2 месяца назад #
procedure ReplaceTextInWordDocument(const FileName, FindText, ReplaceText: string);
const
wdReplaceAll = 2;
var
WordApp, WordDoc, Find: OleVariant;
begin
WordApp := CreateOleObject('Word.Application');
try
WordApp.Visible := False; // Или True — если нужно видеть процесс
// Открытие документа
WordDoc := WordApp.Documents.Open(FileName);
// Получаем Find у всего содержимого документа
Find := WordDoc.Content.Find;
Find.ClearFormatting;
Find.Replacement.ClearFormatting;
// Настройка текста для поиска и замены
Find.Text := FindText;
Find.Replacement.Text := ReplaceText;
// Выполнение замены
Find.Execute(Replace := wdReplaceAll);
// Сохраняем и закрываем документ
WordDoc.Save;
WordDoc.Close(False);
finally
WordApp.Quit;
end;
end;










как это чинить