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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2009, 16:25   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Hookis
или я чего-то не понимаю, или одно из двух...

или вот так, например:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var TS : TStringList;
  TF : TFileStream;
  i : integer;
  s : string;
begin
  try
    TF := TFileStream.Create('Result.txt', fmCreate );
    TS := TStringList.Create;
    TS.LoadFromFile('INPUT.TXT');
    for i:=0 to TS.Count - 1 do
      if Length(Trim(TS.Strings[i]))>0 then
      begin
       if i< (TS.Count - 1)
          then s := '{'+Trim(TS.Strings[i])+'};'
          else s := '{'+Trim(TS.Strings[i])+'}';
       s := StringReplace(s,#9,';',[rfReplaceAll, rfIgnoreCase]);
       TF.Write(s[1], length(s));
      end;
  finally
    FreeAndNil(TS);
    FreeAndNil(TF);
  end;
  Application.MessageBox('Готово. Файл Result.txt записан.',
    'Информация', MB_ICONINFORMATION or MB_OK);
end;
Вложения
Тип файла: rar savetxt1.rar (131.3 Кб, 8 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.07.2009, 17:03   #12
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Радость

Цитата:
то что ты написал маленько не то что хотелось
Ну объясни поподробнее... =)
Цитата:
нужно как запустил программу там будет 1 кнопка типо Import нажал на нее она сама все сделала открыла в memo (memo будет скрыто) в текстовике будет 47105;51422;-2992;35672 он его обработал и созранил в новый файл и программу можно закрывать, а результат в сохраненом новом текстовике должен быть следующим
Код:
{47005;51322;-3012;35672};{47205;51322;-3012;35672};{47205;51522;-3012;35672};{47005;51522;-3012;35672}
То есть нужно чтоб программа просто как бы меняла разделители, а все числа\слова прежние остаются?
Лучше бы было в качестве примера просто привести два файла - "до" и "после"...

А зачем TMemo будет скрыто? Если не нужно, то надо делать как предложил psycho-coder - через переменную...
Да и TStringGrid тогда тоже не нужен...

psycho-coder, благодарю за подсказку о функции StringReplace(), не встрачал такую... Думаю пригодится...
Только код немного переделать надо - текст загрузить, цикл убрать можно, и.т.д.

Черновой вариант (Hookis, теперь похожее стало получаться?):
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var i: Integer; List: TStringList;
Begin
List:=TStringList.Create;
List.LoadFromFile('C:\zona.txt');
List.Text:='{'+StringReplace(List.Text, #9, ';', [rfReplaceAll, rfIgnoreCase]);
List.Text:=StringReplace(List.Text, #13#10, '};{', [rfReplaceAll, rfIgnoreCase]);
List.SaveToFile('C:\zona_updated.txt');
List.Free;
End;
Сохраняется в новый файл (на всякий случай) "C:\zona_updated.txt"... *
I am the First of Cyber Evolution...
I am the First to Program your Future...

Последний раз редактировалось DomiNick; 31.07.2009 в 17:07. Причина: Апечатк был... =(
DomiNick вне форума Ответить с цитированием
Старый 31.07.2009, 17:15   #13
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Ммм. Вон что (скорее всего) оказывается хотел ТС.
На счет флагов. rfIgnoreCase можно убрать. Это игнорировать регистр, а у #9, #13#10 и ";" регистр один
Код:
List.Text:='{'+StringReplace(List.Text, #9, ';', [rfReplaceAll]);
psycho-coder вне форума Ответить с цитированием
Старый 01.08.2009, 22:12   #14
Hookis
Заблокирован
 
Регистрация: 30.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
Ну объясни поподробнее... =)

То есть нужно чтоб программа просто как бы меняла разделители, а все числа\слова прежние остаются?
Лучше бы было в качестве примера просто привести два файла - "до" и "после"...

А зачем TMemo будет скрыто? Если не нужно, то надо делать как предложил psycho-coder - через переменную...
Да и TStringGrid тогда тоже не нужен...

psycho-coder, благодарю за подсказку о функции StringReplace(), не встрачал такую... Думаю пригодится...
Только код немного переделать надо - текст загрузить, цикл убрать можно, и.т.д.

Черновой вариант (Hookis, теперь похожее стало получаться?):
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var i: Integer; List: TStringList;
Begin
List:=TStringList.Create;
List.LoadFromFile('C:\zona.txt');
List.Text:='{'+StringReplace(List.Text, #9, ';', [rfReplaceAll, rfIgnoreCase]);
List.Text:=StringReplace(List.Text, #13#10, '};{', [rfReplaceAll, rfIgnoreCase]);
List.SaveToFile('C:\zona_updated.txt');
List.Free;
End;
Сохраняется в новый файл (на всякий случай) "C:\zona_updated.txt"... *

Попробывал твой вариант более понятен,

вот что идет в файле zona.txt
Код:
47105;51422;-2992;35672
а в zona_updated.txt сохранилось
Код:
{47105;51422;-2992;35672};{
(то есть уже начало и оно правельное)

а мне надо чтоб вот так сохранилось в файле zona_updated.txt

Код:
{47005;51322;-3012;35672};{47205;51322;-3012;35672};{47205;51522;-3012;35672};{47005;51522;-3012;35672}
*****
то есть вот координата 47105;51422;-2992;35672 из нее мне надо сделать квадрат чуть выше я описал какой.
*****
ход работы между Load и Save
1точка {47105-100;51422-100;-2992-20;35672}
2точка {47105+100;51422-100;-2992-20;35672}
3точка {47105+100;51422+100;-2992-20;35672}
4точка {47105-100;51422+100;-2992-20;35672}

и должно после Save сохранится вот это
Код:
{47005;51322;-3012;35672};{47205;51322;-3012;35672};{47205;51522;-3012;35672};{47005;51522;-3012;35672}

Последний раз редактировалось Hookis; 01.08.2009 в 22:14.
Hookis вне форума Ответить с цитированием
Старый 01.08.2009, 22:38   #15
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
Радость

PHP код:
    for ($i=0;$i+1<=count($pos);$i++)
    {
        list(
$x$y$z$v) = split("\t"$pos[$i]); 
в делфи будет выглядеть так:

Код:
type TList record
  x:integer;
  y:integer;
  z:integer;
  v:integer;
 end;


var 
i:integer;
p:TStringList;
List: array of TList;


begin
p:=TStringList.Create;
p.LoadFromFile('Filename.txt');
SetLength(List, p.count-1)
for i:=0 to p.count-1 do
  begin
    List[i].x:=StrToInt(Copy(p.Strings[i], 1, pos(';', p.Strings[i])-1));
    Delete(p.Strings[i], pos(';', p.Strings[i]));
    List[i].y:=StrToInt(Copy(p.Strings[i], 1, pos(';', p.Strings[i])-1));
    Delete(p.Strings[i], pos(';', p.Strings[i]));
    List[i].z:=StrToInt(Copy(p.Strings[i], 1, pos(';', p.Strings[i])-1));
    Delete(p.Strings[i], pos(';', p.Strings[i]));
    List[i].v:=StrToInt(Copy(p.Strings[i], 1, pos(';', p.Strings[i])-1));
  end;
end;
а от шобы оно само обрабарывало прибавление, отнимание.. это уже немного иначе код нада.. тут нада думать.. делать функцыю.. чтото типа миникалькулятора.. придумаю - напишу
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 05.08.2009, 05:12   #16
Hookis
Заблокирован
 
Регистрация: 30.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Ntlegend Посмотреть сообщение
придумаю - напишу
ок спасибо буду надеятся на тебя =)

Цитата:
Сообщение от Ntlegend Посмотреть сообщение
PHP код:
    for ($i=0;$i+1<=count($pos);$i++)
    {
        list(
$x$y$z$v) = split("\t"$pos[$i]); 
в делфи будет выглядеть так:

Код:
type TList record
  x:integer;
  y:integer;
  z:integer;
  v:integer;
 end;


var 
i:integer;
p:TStringList;
List: array of TList;


begin
p:=TStringList.Create;
p.LoadFromFile('Filename.txt');
SetLength(List, p.count-1)
for i:=0 to p.count-1 do
  begin
    List[i].x:=StrToInt(Copy(p.Strings[i], 1, pos(';', p.Strings[i])-1));
    Delete(p.Strings[i], pos(';', p.Strings[i]));
    List[i].y:=StrToInt(Copy(p.Strings[i], 1, pos(';', p.Strings[i])-1));
    Delete(p.Strings[i], pos(';', p.Strings[i]));
    List[i].z:=StrToInt(Copy(p.Strings[i], 1, pos(';', p.Strings[i])-1));
    Delete(p.Strings[i], pos(';', p.Strings[i]));
    List[i].v:=StrToInt(Copy(p.Strings[i], 1, pos(';', p.Strings[i])-1));
  end;
end;
а от шобы оно само обрабарывало прибавление, отнимание.. это уже немного иначе код нада.. тут нада думать.. делать функцыю.. чтото типа миникалькулятора.. придумаю - напишу

не совсем понял куда вставлять
type TList record
- я еще новичек сорри (

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Hookis
или я чего-то не понимаю, или одно из двух...

или вот так, например:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var TS : TStringList;
  TF : TFileStream;
  i : integer;
  s : string;
begin
  try
    TF := TFileStream.Create('Result.txt', fmCreate );
    TS := TStringList.Create;
    TS.LoadFromFile('INPUT.TXT');
    for i:=0 to TS.Count - 1 do
      if Length(Trim(TS.Strings[i]))>0 then
      begin
       if i< (TS.Count - 1)
          then s := '{'+Trim(TS.Strings[i])+'};'
          else s := '{'+Trim(TS.Strings[i])+'}';
       s := StringReplace(s,#9,';',[rfReplaceAll, rfIgnoreCase]);
       TF.Write(s[1], length(s));
      end;
  finally
    FreeAndNil(TS);
    FreeAndNil(TF);
  end;
  Application.MessageBox('Готово. Файл Result.txt записан.',
    'Информация', MB_ICONINFORMATION or MB_OK);
end;
Твой код тоже не плох, из этого
-84076;244560;-3728;36125
сохраняет вот это
{-84076;244560;-3728;36125}

а мне надо хотяб для начала из этого чуда сделать
Код:
{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125}
например я имею Import.txt с двумя строками

-84076;244560;-3728;36125
115084;-178041;-880;58825

нужно чтоб получилось вот такое в result.txt тоже две строчки

Код:
{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125}
{115084;-178041;-880;58825};{115084;-178041;-880;58825};{115084;-178041;-880;58825};{115084;-178041;-880;58825}

Последний раз редактировалось Stilet; 12.08.2009 в 08:45.
Hookis вне форума Ответить с цитированием
Старый 19.08.2009, 22:44   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
нужно чтоб получилось вот такое в result.txt тоже две строчки
Код:
{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125}
{115084;-178041;-880;58825};{115084;-178041;-880;58825};{115084;-178041;-880;58825};{115084;-178041;-880;58825}
просто четырежды продублировать одно и то же значение? (причём в конце строки точка с запятой не нужна?)
Ну, это же элементарно:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const CrLn : string = #13#10;
var TS : TStringList;
  TF : TFileStream;
  i,j : integer;
  s : string;

begin
  try
    TF := TFileStream.Create('Result.txt', fmCreate );
    TS := TStringList.Create;
    TS.LoadFromFile('IMPORT.TXT');
    for i:=0 to TS.Count - 1 do
      if Length(Trim(TS.Strings[i]))>0 then
      begin
         s := '';
         for j:=1 to 3 do
           s := s + '{'+Trim(TS.Strings[i])+'};';
         // чётвёртый раз добавляем без точки с запятой в конце
         s := s + '{'+Trim(TS.Strings[i])+'}';
         s := StringReplace(s,#9,';',[rfReplaceAll, rfIgnoreCase]);
         // записываем эту учетверенную строчку в поток (в файл Result.txt)
         TF.Write(s[1], length(s));
         // запишем в поток перевод строки (перенос на новую строчку)
         TF.Write(CrLn[1], Length(CrLn));
      end;
  finally
    FreeAndNil(TS);
    FreeAndNil(TF);
  end;
  Application.MessageBox('Готово. Файл Result.txt записан.',
    'Информация', MB_ICONINFORMATION or MB_OK);
end;
p.s. мне кажется, если бы Вы подробнее объяснили, что у Вас за данные и что с ними требуется сделать, было бы проще Вам помочь...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.08.2009, 09:50   #18
Hookis
Заблокирован
 
Регистрация: 30.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. мне кажется, если бы Вы подробнее объяснили, что у Вас за данные и что с ними требуется сделать, было бы проще Вам помочь...

Вот Спасибо все окей умножает как надо, теперь рассказываю саму суть как нужно это дело обработать.

в файле Import.txt находиться строчка
Код:
-84076;244560;-3728;36125
когда делаю через твой код в result.txt, записываеться результат вот такой

Код:
{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125}
то есть сделано все как надо, но есть 1 нюанс

например обозначим их как 4 точки
Код:
{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125}
из первой точки надо сделать вот это
Код:
{-84076;244560;-3728;36125} -> {-84076-100;244560-100;-3728-20;36125} -> {-84176;244460;-3748;36125};
из второй точки надо сделать вот это
Код:
{-84076;244560;-3728;36125} -> {-84076+100;244560-100;-3728-20;36125} -> {-83976;244460;-3748;36125};
из третей точки надо сделать вот это
Код:
{-84076;244560;-3728;36125} -> {-84076+100;244560-100;-3728-20;36125} -> {-83976;244660;-3748;36125}
из четвертой точки надо сделать вот это
Код:
{-84076;244560;-3728;36125} -> {-84076-100;244560-100;-3728-20;36125} -> {-84176;244460;-3748;36125};

Подвидем итоги:

У меня щас с твоим кодом сохраняет вот так
Код:
{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125};{-84076;244560;-3728;36125}
а должно вот так

Код:
{-84176;244460;-3748;36125};{-83976;244460;-3748;36125};{-83976;244660;-3748;36125};{-84176;244660;-3748;36125}

Вроде одно и тоже , но на самом деле к каждой точке идет какое-то прибавление или вычитание, но мне срочно нужна помощь в этой программе заранее спасибо - Уважаемый!
Hookis вне форума Ответить с цитированием
Старый 20.08.2009, 17:39   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот. сделал Вам готовую программу. получите и распишитесь!!


В связи с тем, что коэффициенты, которые Вам надо прибавлять/отнимать,
в разных Ваших сообщениях отличаются (сравните по точке 4)
(я за основу взял данные из сегодняшнего поста, хотя, думаю, что Вы просто ошиблись...)
поэтому я сделал возможность задавать коэф-ты коррекции прямо на форме.
Внимание! Изменения коеффициентов НЕ СОХРАНЯЮТСЯ. Надо менять - берите
исходный текст программы и меняйте, как Вам захочется!
Вложения
Тип файла: rar PrCoordinates1.rar (135.6 Кб, 7 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.08.2009, 13:08   #20
Hookis
Заблокирован
 
Регистрация: 30.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вот. сделал Вам готовую программу. получите и распишитесь!!


В связи с тем, что коэффициенты, которые Вам надо прибавлять/отнимать,
в разных Ваших сообщениях отличаются (сравните по точке 4)
(я за основу взял данные из сегодняшнего поста, хотя, думаю, что Вы просто ошиблись...)
поэтому я сделал возможность задавать коэф-ты коррекции прямо на форме.
Внимание! Изменения коеффициентов НЕ СОХРАНЯЮТСЯ. Надо менять - берите
исходный текст программы и меняйте, как Вам захочется!
Вот спасибо то что нужно, коофиценты я сам выставлю - в этом то уж разберусь =)

Не хочу показаться грубым но сколько с меня ? =)
Hookis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перезапись файла без путя или определение расположения файла программы The Best Общие вопросы Delphi 4 13.07.2009 22:50
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10
Подскажите пожалуста! есть ли переменная для обозначения дисковода? Medyankin Помощь студентам 4 27.07.2008 15:58
Два XL файла, данные 1-го файла являются частью другого в формуле 2-го Кот Microsoft Office Excel 2 14.08.2007 16:56