AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text an bestimmter Stelle splitten

Ein Thema von smartmod · begonnen am 18. Apr 2006 · letzter Beitrag vom 19. Apr 2006
Antwort Antwort
smartmod

Registriert seit: 11. Jul 2005
26 Beiträge
 
#1

Text an bestimmter Stelle splitten

  Alt 18. Apr 2006, 18:29
Hallo,

ich versuche, einen Text aus einem Memo an einer bestimmten Stelle zu splitten und dann den ersten Teil in die erste Spalte eines ListViews und den zweiten Teil in dessen zweite Spalte zu schreiben.

Der Text, mit dem es uA funktionieren soll ist folgender:

Zitat:
...
CDA102309/13 EMEA1
CDA102309/14 EMEA2
CDA102309/15 EMEA3
CDA102309/16 EMEA4
CDA102309/17 EMEA5
CDA102309/18 EMEA6
CDA102309/19 EMEA7
CDA102309/20 EMEA8
CDA102309/21 US1
CDA102309/22 US2
CDA102309/101 AL1
CDA102309/102 AL2
CDA102309/103 AL3
CDA102309/104 AL4
CDA102307/11 Generic Trade Taiwan
CDA102307/13 Generic Trade China
CDA102307/14 Generic Trade Hong Kong
CDA102307/31 Generic Trade Malaysia
CDA102307/32 Generic Trade Philippines
CDA102307/33 Generic Trade Netherlands
CDA102307/34 Generic Trade Italy
CDA102307/35 Generic Trade France
...
Der erste Teil (bis zum ersten Leerzeichen) soll in die erste Spalte, der Rest in die zweite.

Das funktioniert auch soweit ganz gut, allerdings trennt er bei den Werten ab "CDA102307/11 Generic Trade Taiwan" erst beim zweiten Leerzeichen.

Hier ist mein Quellcode:

Delphi-Quellcode:
var
  Form1: TForm1;
  i, j, Posi: Integer;
  S: String;
  found: Boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ListView1.Clear;
Posi := 1;

    for i := 0 to Memo1.Lines.Count-1 do

    begin
      found := false;
      S := Memo1.Lines.Strings[i];

      for j := 1 to length(S) do

      If not found then
      begin

        begin
          Posi := PosEx(Seperator.Text, S, Posi);
          If S[Posi] = Seperator.Text then
            begin
            found := true;
            end;
        end;

      ListView1.Items.Add;
      ListView1.Items[i].Caption := copy (S,1,Posi);
      ListView1.Items[i].SubItems.Add(copy (S,Posi+1,Length(S)-Posi));

      end;

    end;


end;
Kann mir jemand sagen, warum das so ist?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Text an bestimmter Stelle splitten

  Alt 18. Apr 2006, 19:21
Hi.

Wenn du mit den einzelnen Zeilen eines Memos arbeitest, dann ist PosEx() wohl fehl am Platz.

Delphi-Quellcode:
var
  Form1: TForm1;

implementation

{$R *.dfm}

function After(const S, Pattern: String): String;
var
  i: Integer;
begin
  i := Pos(Pattern, S);
  if i = 0
    then Result := ''
    else Result := Copy(S, i + Length(Pattern), Length(S));
end;

function Before(const S, Pattern: String): String;
var
  i: Integer;
begin
  i := Pos(Pattern, S);
  if i = 0
    then Result := S
    else Result := Copy(S, 1, Pred(i));
end;

procedure MakeItems(s: TStrings; li: TListItems);
var
  i: Integer;
begin
  li.BeginUpdate;
  li.Clear;
  for i := 0 to Pred(s.Count) do
    with li.Add do
    begin
      Caption := Before(s[i], ' ');
      SubItems.Add(After(s[i], ' '));
    end;
  li.EndUpdate;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Screen.Cursor := crHourGlass;
  try
    MakeItems(Memo.Lines, ListView1.Items);
  finally
    Screen.Cursor := crDefault;
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#3

Re: Text an bestimmter Stelle splitten

  Alt 18. Apr 2006, 19:26
Hallo,

warum machst Du es Dir so schwer?

So geht's (nur mit 2 Memos anstelle der zwei Spalten im ListView):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   i, iPos: Integer;
begin
   for i := 0 to Memo1.Lines.Count - 1 do begin
      iPos := Pos(' ', Memo1.Lines.Strings[i]);
      Memo2.Lines.Add(Copy(Memo1.Lines.Strings[i], 0, iPos));
      Memo3.Lines.Add(Copy(Memo1.Lines.Strings[i], iPos, Length(Memo1.Lines.Strings[i])));
   end;
end;
  Mit Zitat antworten Zitat
smartmod

Registriert seit: 11. Jul 2005
26 Beiträge
 
#4

Re: Text an bestimmter Stelle splitten

  Alt 19. Apr 2006, 20:11
Vielen Dank! Jetzt läufts.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz