AGB  ·  Datenschutz  ·  Impressum  







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

Zahlen zusammenfassen

Ein Thema von HariboHunter · begonnen am 16. Jan 2006 · letzter Beitrag vom 17. Jan 2006
Antwort Antwort
Benutzerbild von HariboHunter
HariboHunter

Registriert seit: 5. Okt 2004
Ort: Kentucky
78 Beiträge
 
#1

Zahlen zusammenfassen

  Alt 16. Jan 2006, 08:29
Moin DP.

Ich möchte euch nun mit einem kleinen Problem belästigen, welches auf den ersten Blick trivial erscheint und dies vieleicht auch ist, ich aber schon etliche Stunden erfolglos darüber gebrütet hab.

Also:

Ich habe einen String mit Jahreszahlen, chronologisch sortiert, aber nicht unbedingt aufeinanderfolgend. z.B.

1982, 1985, 1986, 1987, 1990, 1992, 1993, 1995, 1996, 1997

nun möchte ich diese Zahlen welche aufeinanderfolgen, zusammenfassen so das die Sache hinterher so aussieht.

1982, 1985-1987, 1990, 1992-1993, 1995-1997

Irgendwie schaff ich es aber nicht die Sache in eine Schleife reinzupacken.
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Zahlen zusammenfassen

  Alt 16. Jan 2006, 08:50
Delphi-Quellcode:
var
  I,L,Start: Integer;
  B: Boolean;
begin
  B := False;
  L := A[Low(A)]; //das erste Jahr
  for I := Low(A)+1 to High (A) do
  begin
    if A[I]=L+1 then
      begin
        B := True;
        Start := L
      end
    else
      begin
        if B then //von Start bis L
             else // nur L
        B := False;
      end;
    L := A[I]
  end;
end;
sollte klappen ungetestet
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
Ferber

Registriert seit: 9. Mär 2005
Ort: Wien Umgebung
155 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Zahlen zusammenfassen

  Alt 16. Jan 2006, 11:22
@Koroko1999: Glaube nicht, daß das funzt.

Das ist getestet:
Delphi-Quellcode:
function Zusammenfassen(st:String):String;
var sl:TStringlist; i,j:Integer;
begin
  Result:='';
  sl:=TStringlist.Create;
  sl.CommaText:=st;
  if sl.Count>0 then
    begin
      i:=0;
      Result:=sl.Strings[0];
      for j:=1 to sl.Count-1 do
        if StrToInt(sl.Strings[j])<>StrToInt(sl.Strings[j-1])+1 then
          begin if (j-i)>1
                then Result:=Result+'-'+sl.Strings[j-1]+', '+sl.Strings[j]
                else Result:=Result+', ' +sl.Strings[j];
                i:=j;
          end;
      if (j-i)>1
         then Result:=Result+'-'+sl.Strings[j-1]
    end;
  sl.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit2.Text:=Zusammenfassen(Edit1.Text);
end;
Otto
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Zahlen zusammenfassen

  Alt 16. Jan 2006, 13:56
Stimmt, klappt nicht ganz, aber so
Delphi-Quellcode:
var
  A: array[0..9] of Word;
  I,L,Start: Integer;
  B: Boolean;
  procedure _Entry;
  begin
    if B then Result := Result+IntToStr(Start)+'-'+IntToStr (L)+', '
         else Result := Result+IntToStr(L)+', ';
    B := False;
  end;
begin
  Result := '';
  a[0] := 1982;
  a[1] := 1985;
  a[2] := 1986;
  a[3] := 1987;
  a[4] := 1990;
  a[5] := 1992;
  a[6] := 1993;
  a[7] := 1995;
  a[8] := 1996;
  a[9] := 1998;
  B := False;
  L := A[Low(A)]; //das erste Jahr
  for I := Low(A)+1 to High (A) do
  begin
    if A[I]=L+1 then
      begin
        if not B then Start := L;
        B := True;
      end
    else _Entry;
    L := A[I]
  end;
  _Entry;
end;
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#5

Re: Zahlen zusammenfassen

  Alt 16. Jan 2006, 14:26
Hi, Du solltest Deine Aufgabenstellung erstmal richtig definieren.



Du fasst 85 und 87 zusammen, aber woher soll das Programm bitteschön wissen, dass Du 1990-1992 gerade NICHT zusammenfassen willst.
Du solltest Dir erstmal Deine Regeln definieren und überlegen, was Du überhaupt machen willst.
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
marabu

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

Re: Zahlen zusammenfassen

  Alt 16. Jan 2006, 14:42
Na ja, einen Bereich bildet man ab drei aufeinander folgenden Zahlen - das Beispiel scheint da keine Ausnahme zu machen. Aber grundsätzlich begrüße auch ich explizite Anforderungen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#7

Re: Zahlen zusammenfassen

  Alt 16. Jan 2006, 15:05
ah, dann hab ich das falsch verstanden alles klar .. sorry
sollte ja kein problem sein, irgendein geposteter Algorithmus sollte schon funktionieren
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von HariboHunter
HariboHunter

Registriert seit: 5. Okt 2004
Ort: Kentucky
78 Beiträge
 
#8

Re: Zahlen zusammenfassen

  Alt 17. Jan 2006, 13:37
Delphi-Quellcode:
function Zusammenfassen(st:String):String;
var sl:TStringlist; i,j:Integer;
begin
  Result:='';
  sl:=TStringlist.Create;
  sl.CommaText:=st;
  if sl.Count> 1 then // 0 durch 1 ersetzt
    begin
      i:=0;
      Result:=sl.Strings[0];
      for j:=1 to sl.Count-1 do
        if StrToInt(sl.Strings[j])<>StrToInt(sl.Strings[j-1])+1 then
          begin if (j-i)>1
                then Result:=Result+'-'+sl.Strings[j-1]+', '+sl.Strings[j]
                else Result:=Result+', ' +sl.Strings[j];
                i:=j;
          end;
      if (j-i)>1
         then Result:=Result+'-'+sl.Strings[j-1]
    end;
  sl.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit2.Text:=Zusammenfassen(Edit1.Text);
end;

jetzt funktioniert es wunderbar, Frage Beantwortet, Patient sehr glücklich.
  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 19:07 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