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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2014, 23:22   #1
romka1608
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 41
По умолчанию Массивы

У меня есть Edit1 файл, там записано я "1,3,5,7,9".
Мне надо спарсить без запятых, и записать в txt файл.

Код:
var
f:Text;
  n: integer;
  mass: array[1..6] of string;
begin
AssignFile(f, 'D:\mytext.txt');
{$I-}
  Rewrite(f);
{$I+}
if ioresult <>0 then exit;


for n:=1 to 5 do
begin
mass[n] := Copy((Edit1.text, n, pos(',', Edit1.text)));
write(f,mass[n]+' ');
end;
closefile(f);
Оно не парсит цифри. Здесь ошибка в Copy. Как это правильно записать?

Последний раз редактировалось romka1608; 14.12.2014 в 23:29.
romka1608 вне форума Ответить с цитированием
Старый 14.12.2014, 23:30   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,572
По умолчанию

Да все гораздо проще:
Код:
stringreplace(edit1.Text,',',' ',[rfReplaceAll])
Arigato вне форума Ответить с цитированием
Старый 14.12.2014, 23:38   #3
romka1608
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 41
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Да все гораздо проще:
Код:
stringreplace(edit1.Text,',',' ',[rfReplaceAll])
Мне нужно именно через массив
romka1608 вне форума Ответить с цитированием
Старый 15.12.2014, 04:11   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Вот, кода много, но работает :D

з.ы., потом увидел код stringreplase, и понял что ровня:DD

Код:
function StringReplace(const S, OldPattern, NewPattern: string;
  Flags: TReplaceFlags): string;
var
  SearchStr, Patt, NewStr: string;
  Offset: Integer;
begin
  if rfIgnoreCase in Flags then
  begin
    SearchStr := AnsiUpperCase(S);
    Patt := AnsiUpperCase(OldPattern);
  end else
  begin
    SearchStr := S;
    Patt := OldPattern;
  end;
  NewStr := S;
  Result := '';
  while SearchStr <> '' do
  begin
    Offset := AnsiPos(Patt, SearchStr);
    if Offset = 0 then
    begin
      Result := Result + NewStr;
      Break;
    end;
    Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern;
    NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt);
    if not (rfReplaceAll in Flags) then
    begin
      Result := Result + NewStr;
      Break;
    end;
    SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
  end;
end;
Вложения
Тип файла: zip строки.zip (202.0 Кб, 9 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 15.12.2014 в 04:15.
Алексей_2012 вне форума Ответить с цитированием
Старый 15.12.2014, 08:44   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

romka1608, может быть, Вам такое нужно?

код парсинга строки в массив:
Код:
uses StrUtils;


type TMas = array[1..6] of string;


procedure ParseEditToArray(S1: string; var N: integer; var M: TMas);
var
  f: Text;
  i, k, k2: Integer;
  s: string;
begin
  n := 0;
  for i := Low(M) to High(M) do M[i] := '';

  AssignFile(f, 'D:\mytext.txt');
  {$I-}
    Rewrite(f);
  {$I+}
  if ioresult <> 0 then exit;
  s := Trim(S1);
  if Length(s) = 0 then begin
    ShowMessage('Edit пустой!'); 
    Exit;
  end;
  if Copy(s, Length(s), 1)<>',' then s := s + ',';
  i := Low(M)-1;
  k := 1;
  k2 := PosEx(',', s, k);
  while k2>0 do begin
    if i=High(M) then begin
        ShowMessage('В строке больше значений, чем размер массива'); 
        break
    end
    else begin
       inc(i);
       M[i] := Trim(Copy(s, k , k2-k));
       k := k2 + 1;
       k2 := PosEx(',', s, k);
    end;
  end;
  n := i;
  for i := Low(M) to n do
    write(f, M[i] + '  ');
  closefile(f);
end;
вызывать так:
Код:
var
  n: integer;
  mass: TMas;
  st  : string;

begin
  { st := Edit1.Text;  временно закомментируем}
      st := '  12,45,  777, 9 ';  {для наглядности присвоим строку прямо в коде}
  ParseEditToArray(st, n, mass);
end.

p.s. тоже самое можно и просто через TStringList через Delimiter или DelimitedText получить.

Код:
var
  list1 : TStringList;
  i : integer;
begin
 list1 := TStringList.Create;
 try
   list1.Delimiter := ',';
   list1.DelimitedText := Trim(Edit1.Text);

   for i := 0 to list1.Count - 1 do
        mass[i+1] := list1.Strings[i];
 finally
   list1.Free;
 end;
end;

Последний раз редактировалось Serge_Bliznykov; 15.12.2014 в 08:49.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2014, 12:24   #6
romka1608
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 41
По умолчанию

Спасибо всем!
romka1608 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12