Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi:Удаление символа в начале строки 
:(
    Опции темы
sokolik117845
Дата 9.4.2012, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.7.2011

Репутация: нет
Всего: нет



Существует txt файл вида:

11xxx11xx
11xxx11xx
11xxx11xx
11xxx11xx
11xxx11xx
11xxx11xx
11xxxxxx
11xxx11xx
11xxx11xx
11xxx11xx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx

Как удалить '11', если это число находится в начале строки? Важно чтобы оно не удалилось в середине или конце строки, если оно присутствует там!

И чтобы не плодить топики:
Как добавить символ в начало каждой строки?
PM MAIL   Вверх
Данкинг
Дата 9.4.2012, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Грузишь в TStringlist, как обычно... smile 

Далее:
Код

if copy(stroka,1,2)='11' then
 stroka=copy(stroka,3,length(stroka));


Цитата(sokolik117845 @  9.4.2012,  13:54 Найти цитируемый пост)
Как добавить символ в начало каждой строки? 

Код

stroka='a'+stroka;


Добавлено через 31 секунду
Ну, всё это в цикле по стринглисту, разумеется.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
sokolik117845
Дата 9.4.2012, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.7.2011

Репутация: нет
Всего: нет



Или лыжи не едут или я....
Код

procedure TForm1.Button1Click(Sender: TObject);
var ts:TStringList;
   i : integer;
   s : string;
begin
  ts := TStringList.Create;

  try
    ts.LoadFromFile('Исходный.txt');
    for i:=0 to ts.Count-1 do begin
      s := ts.Strings[i];
      s :=copy(s,3,length(s));
     end;

     ts.SaveToFile('1.txt');

  finally
     ts.Free;



end;
end;


Что то я намудрил похоу! Что не так? Не работает(
PM MAIL   Вверх
Keeper89
Дата 9.4.2012, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



sokolik117845, ну вот скопировал ты нужную часть в строку s. А обратно в лист кто будет копировать?


--------------------
PM MAIL WWW   Вверх
RelictOs
Дата 9.4.2012, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 14.2.2012

Репутация: 1
Всего: 1



Код


procedure TForm1.Button1Click(Sender: TObject);
var ts:TStringList;
   i : integer;
   s : string;
begin
  ts := TStringList.Create;
  try
    ts.LoadFromFile('Исходный.txt');
    for i:=0 to ts.Count-1 do begin
      if copy(ts.Strings[i],1,2)='11' then 
        Delete(ts.Strings[i],1,2);
     end;
     ts.SaveToFile('1.txt');
  finally
     ts.Free;
end;
end;

PM MAIL ICQ Skype   Вверх
sokolik117845
Дата 9.4.2012, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.7.2011

Репутация: нет
Всего: нет



А как перезаписать строку в исходном файле но без символа '11'?

Это сообщение отредактировал(а) sokolik117845 - 9.4.2012, 17:31
PM MAIL   Вверх
Данкинг
Дата 9.4.2012, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



А ts.SaveToFile('1.txt'); на что?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
sokolik117845
Дата 9.4.2012, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.7.2011

Репутация: нет
Всего: нет



Цитата(Данкинг @ 9.4.2012,  17:41)
А ts.SaveToFile('1.txt'); на что?

При использовании данного кода при удалении нужного значения остается пробел, плюс ко всему этому при сохранении в новый файл сохраняется позиция строки исходного файла! Т.е. если первая строка со значением '11' , была на 200й строке в исходном файле, то в файле для сохранения она пишется на той же строке! И в новый файл сохраняются только те строки в которых удалили нужное значение! Гуглил, пробовал Assign( Не знаю уже как решить проблему!
Вобщем перемудрил что то я, выручите!

Это сообщение отредактировал(а) sokolik117845 - 9.4.2012, 17:54
PM MAIL   Вверх
RelictOs
Дата 9.4.2012, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 14.2.2012

Репутация: 1
Всего: 1



Код

procedure TForm1.Button1Click(Sender: TObject);
var ts:TStringList;
   i : integer;
   s : string;
begin
  ts := TStringList.Create;
  try
    ts.LoadFromFile('Исходный.txt');
    for i:=0 to ts.Count-1 do begin
      if copy(ts.Strings[i],1,2)='11' then
       begin 
        Delete(ts.Strings[i],1,2);
        with TFileStream.Create('Имяфайла.txt',fmCreate or fmOpenWrite or fmShareDenyWrite) do
         begin
          Seek(Size,soBeginning);
          Write(PChar(ts.Strings[i])[0],Length(ts.Strings[i]));
          Free;
         end;
       end;
     end;
     ts.SaveToFile('1.txt');
  finally
     ts.Free;
end;
end;


и хоть бы раз соизволили сказать спасибо за помощь, мистер  sokolik117845

Это сообщение отредактировал(а) RelictOs - 9.4.2012, 19:40
PM MAIL ICQ Skype   Вверх
sokolik117845
Дата 10.4.2012, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.7.2011

Репутация: нет
Всего: нет



Цитата(RelictOs @ 9.4.2012,  19:39)
Код

procedure TForm1.Button1Click(Sender: TObject);
var ts:TStringList;
   i : integer;
   s : string;
begin
  ts := TStringList.Create;
  try
    ts.LoadFromFile('Исходный.txt');
    for i:=0 to ts.Count-1 do begin
      if copy(ts.Strings[i],1,2)='11' then
       begin 
        Delete(ts.Strings[i],1,2);
        with TFileStream.Create('Имяфайла.txt',fmCreate or fmOpenWrite or fmShareDenyWrite) do
         begin
          Seek(Size,soBeginning);
          Write(PChar(ts.Strings[i])[0],Length(ts.Strings[i]));
          Free;
         end;
       end;
     end;
     ts.SaveToFile('1.txt');
  finally
     ts.Free;
end;
end;


и хоть бы раз соизволили сказать спасибо за помощь, мистер  sokolik117845

Большое спасибо! Выручил меня!
PM MAIL   Вверх
Qu1nt
Дата 10.4.2012, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



Код

uses
  System.Classes, System.StrUtils;

procedure Solve(const SourceFileName, DestinationFileName, Tag: String);
var
  Line: String;
begin
  with TStreamReader.Create(SourceFileName) do
  try
    with TStreamWriter.Create(DestinationFileName) do
    try
      while not EndOfStream do
      begin
        Line := ReadLine;
        if StartsText(Tag, Line) then
          WriteLine(Line);
      end;
    finally
      Free;
    end;
  finally
    Free;
  end;
end;

begin
  Solve('source.txt', 'destination.txt', '11');
end.

PM MAIL   Вверх
sokolik117845
Дата 10.4.2012, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.7.2011

Репутация: нет
Всего: нет



Код

procedure TForm1.Button1Click(Sender: TObject);
var ts:TStringList;
   i : integer;
   s : string;
begin
  ts := TStringList.Create;
  try
    ts.LoadFromFile('Исходный.txt');
    for i:=0 to ts.Count-1 do begin
      if copy(ts.Strings[i],1,2)='11' then
       begin 
        Delete(ts.Strings[i],1,2);
        with TFileStream.Create('Имяфайла.txt',fmCreate or fmOpenWrite or fmShareDenyWrite) do
         begin
          Seek(Size,soBeginning);
          Write(PChar(ts.Strings[i])[0],Length(ts.Strings[i]));
          Free;
         end;
       end;
     end;
     ts.SaveToFile('1.txt');
  finally
     ts.Free;
end;
end;

Код

Delete(ts.Strings[i],1,2);

^^^ компилятор ругается на эту строчку!
Constant object cannotbe passed as var parameter
PM MAIL   Вверх
RelictOs
Дата 10.4.2012, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 14.2.2012

Репутация: 1
Всего: 1



sokolik117845, просто перед процедурой удаления запишите ts.Strings[i] в отдельную переменную
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.