Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
ВнизКк из большого текстового файла удалять символы по особым ... Найти похожие ветки
← →
IronHawk (2003-05-05 17:24) [0]... условиям, например нужно удалить все символы находящиеся между "!" и "№" при этом сами "!" и "№" заменить на % и & соответственно?
... заранее благодарен!
← →
MBo (2003-05-05 17:26) [1]
procedure CutBetween(const OldName, NewName: string;
CutStart, CutEnd, NewStart, NewEnd: Char);
var
HFile: THandle;
HMap: THandle;
PView: PByteArray;
Size, NewSize: Integer;
i: integer;
Flag: Boolean;
NewArr: array of byte;
BBegin, BEnd, NBegin, NEnd: Byte;
begin
NewSize := 0;
BBegin := Ord(CutStart);
BEnd := Ord(CutEnd);
NBegin := Ord(NewStart);
NEnd := Ord(NewEnd);
HFile := FileOpen(OldName, fmOpenRead);
if HFIle <> INVALID_HANDLE_VALUE then
begin
Size := GetFileSize(HFile, nil);
HMap := CreateFileMapping(HFile, nil, PAGE_READONLY, 0, 0, nil);
if HMap > 0 then
begin
PView := MapViewOfFile(HMap, FILE_MAP_READ, 0, 0, Size);
if PView <> nil then
begin
Flag := True;
SetLength(NewArr, Size);
for i := 0 to Size - 1 do
begin
if Flag then
begin
if PView[i] = BBegin then
begin
NewArr[NewSize] := NBegin;
inc(NewSize);
Flag := False;
end
else
begin
NewArr[NewSize] := PView[i];
inc(NewSize);
end;
end
else
begin
if PView[i] = BEnd then
begin
NewArr[NewSize] := NEnd;
inc(NewSize);
Flag := True;
end;
end;
end;
UnMapViewOfFile(PView);
end;
CloseHandle(HMap);
end;
FileClose(HFile);
end;
if NewSize > 0 then
begin
HFile := FileCreate(NewName);
if HFile <> INVALID_HANDLE_VALUE then
begin
FileWrite(HFile, NewArr[0], NewSize);
FileClose(HFile);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CutBetween("e:\qaz.txt","e:\qaz.new","a","b","A","B");
end;
← →
Mikhail (2003-05-05 17:55) [2]Разнца во времени :)))
← →
IronHawk (2003-05-05 18:04) [3]
> Mikhail © (05.05.03 17:55)
На то он и МАСТЕР!
← →
IronHawk (2003-05-05 18:16) [4]
> MBo © (05.05.03 17:26)
Супер просто, слов нету, ОТЛИЧНО!
ОГРОМАДНЕЙШЕЕ СПАСИБО!
← →
IronHawk (2003-05-06 12:10) [5]
> MBo © (05.05.03 17:26)
Но я упусти один момент, если стоит ! и № то всё отлично, а чтоб руками потом не удалять "" которые по краям ! и № как бы так и их тоже заменять?
Тоесть "!" = % и "№" = &
← →
Digitman (2003-05-06 12:16) [6]классика !!! "дай г., дай ложку" !)))
← →
MBo (2003-05-06 13:07) [7]Добавь в нужных местах IF-блока доп. проверки и преобразования.
← →
IronHawk (2003-05-06 15:41) [8]
> Digitman © (06.05.03 12:16)
Ай-ай-ай...
> MBo © (06.05.03 13:07)
А я пробую с приведением топов и Ord-ом...
← →
MBo (2003-05-06 18:28) [9]новые строки должны быть не длиннее старых (это может сказаться в начале файла). Пишет в то же имя.
procedure CutBetweenInPlaceStr(const FileName,
CutStart, CutEnd, NewStart, NewEnd: string);
var
HFile: THandle;
HMap: THandle;
PView: PChar;
Size: Integer;
POld, PNew, PStart, PEnd: PChar;
LStart, LEnd, LNStart, LNEnd, DiffLen: Integer;
begin
LStart := Length(CutStart);
LEnd := Length(CutEnd);
LNStart := Length(NewStart);
LNEnd := Length(NewEnd);
HFile := FileOpen(FileName, fmOpenReadWrite);
if HFIle <> INVALID_HANDLE_VALUE then
begin
Size := GetFileSize(HFile, nil);
DiffLen := Size;
HMap := CreateFileMapping(HFile, nil, PAGE_READWRITE, 0, 0, nil);
if HMap > 0 then
begin
PView := MapViewOfFile(HMap, FILE_MAP_ALL_ACCESS, 0, 0, Size);
if PView <> nil then
begin
PEnd := AnsiStrPos(PView, PChar(CutEnd));
PStart := AnsiStrPos(PView, PChar(CutStart));
if (PEnd <> nil) and (Dword(PEnd) < DWord(PStart)) then
begin
POld := PEnd;
PNew := PEnd;
Move(NewEnd[1], PNew^, LNEnd);
Inc(POld, LEnd);
Inc(PNew, LNEnd);
end
else
begin
POld := PStart;
PNew := PStart;
end;
while PStart <> nil do
begin
DiffLen := PStart - POld;
Move(POld^, PNew^, DiffLen);
Inc(POld, DiffLen);
Inc(PNew, DiffLen);
Move(NewStart[1], PNew^, LNStart);
Inc(POld, LStart);
Inc(PNew, LNStart);
PEnd := AnsiStrPos(POld, PChar(CutEnd));
if PEnd <> nil then
begin
Move(NewEnd[1], PNew^, LNEnd);
POld := PEnd;
Inc(POld, LEnd);
Inc(PNew, LNEnd);
end;
PStart := AnsiStrPos(POld, PChar(CutStart));
end;
DiffLen := Size - (POld - PView);
Move(POld^, PNew^, DiffLen);
DiffLen := (PNew - PView) + DiffLen;
UnMapViewOfFile(PView);
end;
CloseHandle(HMap);
end;
SetFilePointer(HFile, DiffLen, nil, FILE_BEGIN);
SetEndOfFile(HFile);
FileClose(HFile);
end;
end;
← →
IronHawk (2003-05-06 19:10) [10]А потом:
?
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> CutBetween("e:\export.txt","a","b","A","B");
> end;
Так оно чёт не арбайтен 8-(
← →
MBo (2003-05-07 05:14) [11]а потом
CutBetweenInPlaceStr("e:\qaz.zzz", "a", "b", "A", "B");
из
ba1a23b456a789b123
делает
BAB456AB123
← →
IronHawk (2003-05-07 11:11) [12]
> MBo © (07.05.03 05:14)
У меня не делает!
Ничего, пусто, файл вообще не меняеться!
← →
MBo (2003-05-07 12:55) [13]приведи кусочек файла и как вызываешь
← →
Radionov Alexey (2003-05-07 13:46) [14]>MBo © (07.05.03 12:55)
Борис, ты попал :)
← →
IronHawk (2003-05-07 14:33) [15]Лумси-2"!"Луганск"!"91016, ул. Демехина, 31, кв. 19"!"(0642) 34-4300, 34-4107, 34-4104"!"Факс: 34-4300"!"WWW: http://www.lumsi.com.ua"!"E-mail: info@lumsi.com.ua"!"Дата основания: 1996"!"" "Основные виды деятельности: Торговля оптом Торговля в розницу Производство ПК Проектирование и монтаж ЛВС Проектирование и монтаж структурированных кабельных систем (СКС) Производство серверов Занимается продажей и сервисным обслуживанием техники Minolta, продажей расходных материалов к Minolta. ООО ЛУМСИ-2 является представителем фирмы Квазар Микро , занимается продажей компьютеров, мониторов, ноутбуков. ООО ЛУМСИ-2 занимается поставкой и сопровождением автоматизированной системы Нормативные акты Украины.; ООО ЛУМСИ-2 является дилером Минолта Украина.""!"Официальные соглашения с вендорами: Расходные материалы для копировальных аппаратов Минолта Украина Дилер Расходные материалы для принтеров Минолта Украина Дилер Факс-аппараты Минолта Украина Дилер Принтеры Минолта Украина Дилер Копировальные аппараты Минолта Украина Дилер Проекционное оборудование Литер Дилер ПК Квазар-Микро Дилер Серверы Квазар-Микро Дилер Ноутбуки Квазар-Микро Дилер "!"Основные виды деятельности: Торговля в розницу Ремонт офисной техники Организация on-line доступа в Internet (Internet-провайдинг) Проектирование и монтаж ЛВС Покупка/продажа техники б/у Копи-центр Печать изображений большого формата "!""!""!""!""!""!""!""!""!"
Восьмий кол_р"!"Киев"!"б-р Шевченка, 36-Б"!"(044) 235-4895, 235-1443, 235-5600"!"Факс: 235-1443"!"WWW: http://www.viiik.kiev.ua"!"E-mail: viiikolir1@kv.ukrtel.net"!"Дата основания: 1987"!"" "Основные виды деятельности: Печать изображений большого формата Рекламное или PR-агентство Из наших заказчиков: Орлан , Галактон , Национальная лотерея , Пфайзер , Эванс , Артемида.; г. Разработка оригинал-макетов для пищевого направления: этикетка, упаковка, плакаты, буклеты. Из наших работ: Казенка , Крепков , Золотой цитрус , Бар-Нет.""!"Основные виды деятельности: "!""!""!""!""!""!""!""!""!""!"
Казка"!"Киев"!"ул. Михайловская, 1/3, г. Козацький , магазин Казка"!"(044) 228-0361, 229-8095"!"Факс: 490-7016"!"WWW: http://www.test-98.com/kazka.htm"!"E-mail: shop@test-98.com"!"Дата основания: 1998"!"" "Основные виды деятельности: Торговля в розницу Торговля через магазин Производство ПК Проектирование и монтаж ЛВС Копи-центр Запись и тиражирование CD-ROM Установка и сопровождение ПО Открыт в 1999 году. Основными направлениями деятельности является розничная торговля ноутбуками, компьютерной техникой, комплектующими, периферией и акссесуарами. Наша компания предлагает в широком ассортименте портативную технику и карманные компьютеры производства TOSHIBA, COMPAQ, FUJITSU-SIEMENS, HEWLETT-PACKARD, SONY и IBM. Теперь в наших салонах представлены не только ноутбуки всех модификаций, но и карманные ПК, а также DeskTop и SlimTop компьютеры Brandname. Специально подготовленные продавцы-консультанты помогут Вам выбрать наиболее подходящую по стоимости и функциональности модель ноутбука или карманного ПК, а также проконсультируют об особенностях модельных рядов того или иного производителя. Кроме того в наших розничных отделах Вы можете приобрести любой товар, доступный в данный момент на компьютерном рынке г. Киев а. Принцип работы наших отделов основывается на гибкой схеме заказов, с последующей доставкой (если Вы не в состоянии увезти товар самостоятельно). Срок поставки от 2-х часов (комплектующие) до 24-х часов (собранные компьютеры). Причем доставка компьютеров в пределах города бесплатна. Адрес магазина: ул. Михайловская, 1/3, г. Козацький , магазин Казка.; Розничный отдел компании Тест-98.""!"Официальные соглашения с вендорами: Ноутбуки Hewlett-Packard Reseller Факс-аппараты Панасоник СНГ Reseller Мини-АТС Панасоник СНГ Reseller Телефоны, радиотелефоны, автоответчики Панасоник СНГ Reseller Ноутбуки Compaq Computer Reseller Компьютеры Apple Apple Reseller Ноутбуки Toshiba Reseller ПК Тест-98 Reseller Ноутбуки Fujitsu Siemens Computers Reseller Расходные материалы для принтеров InkTec Reseller Ноутбуки Apple Reseller Ноутбуки MaxSelect Reseller Ноутбуки IBM Reseller "!""!""!""!""!""!""!""!""!""!"
← →
IronHawk (2003-05-07 14:34) [16]
> Radionov Alexey © (07.05.03 13:46)
Попали все, и давно, с моим приходом на этот форум! :-)))
А вообще тут есть люди которые никогда не попадают!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c