![]() |
sortierte Listen manipulieren
Ich habe folgende Funktion, um Strings in Stringlisten zu kürzen.
Dabei kommt folgende Fehlermeldung: "Operation für sortierte Listen nicht zulässig". Wie kann ich trotzdem die Listeneinträge manipulieren?
Delphi-Quellcode:
Die Listen sind wie folgt erzeugt:
const
SOIdLen = 8; var i : Integer; s : String; len : Integer; begin if SLSONumber.Count > 0 then begin for I := 0 to SLSONumber.Count -1 do begin s := SLSONumber[i]; len := length(s); if len > SOIdLen then begin Delete(s, 9, len - SOIdLen); SLSONumber[i] := s; end; end; end; end;
Delphi-Quellcode:
vSPSSO := TStringList.Create;
vSPSSO.Duplicates := dupIgnore; vSPSSO.Sorted := True; |
AW: sortierte Listen manipulieren
Ich weiß nicht genau ob es richtig ist aber probier mal "for i := 1" anstelle der 0.
|
AW: sortierte Listen manipulieren
Ne, die
Delphi-Quellcode:
ist schon richtig. Du musst vermutlich
0
Delphi-Quellcode:
erst wieder auf
Sorted
Delphi-Quellcode:
setzen, bevor du den Inhalt änderst.
false
|
AW: sortierte Listen manipulieren
Stringlisten beginnen bei 0, das ist so schon ok.
Durch die Zuweisung
Delphi-Quellcode:
kann sich die Reihenfolge der Einträge in der Liste (zumindest theoretisch) verändern. Vermutlich mag die Liste das so nicht. Was passiert, wenn Du Deine Routine so abänderst?
SLSONumber[i] := s;
Delphi-Quellcode:
const
SOIdLen = 8; var i : Integer; s : String; len : Integer; begin SLSONumber.Sorted := False; // <-neu if SLSONumber.Count > 0 then begin for I := 0 to SLSONumber.Count -1 do begin s := SLSONumber[i]; len := length(s); if len > SOIdLen then begin Delete(s, 9, len - SOIdLen); SLSONumber[i] := s; end; end; end; SLSONumber.Sorted := True; // <-neu end; |
AW: sortierte Listen manipulieren
Zitat:
Wie es aussieht, geht die Änderung. Eigentlich einfach, wenn mans weiß. |
AW: sortierte Listen manipulieren
Das müsste doch auch kürzer gehen.
Delphi-Quellcode:
Ungetestet, da auf dem Tablet getippt.
Liste.Sorted := false;
for I := 0 to Liste.Count - 1 do liste[i] := Copy(Liste[i], 1, 8); Liste.Sorted := true; |
AW: sortierte Listen manipulieren
Ja, ist kürzer, aber es hat nicht die selbe Funktion, denn der originale Code macht nichts, wenn wenn nicht mindestens ein Zeichen übrig bleibt.
So geht es auch.
Delphi-Quellcode:
Unter der Annahme/Bedingung:
for i := 0 to Liste.Count - 1 do begin
Liste.Add(LeftStr(Liste[i], 8)); Liste.Delete(i + 1); end; * die Liste ist sortiert * der gekürzte String ist in der Sortierung immer kleiner, also landet immer vor dem Originalstring * durch dupIgnore würde der Code knallen, wenn einer/mehrere der Strings nicht länger als 8 ist (denn dann kommt immer ein Leerstring '' raus und die Indize stimmen dann nicht mehr) Aber wie gesagt, es fehlt noch eine Bedingung.
Delphi-Quellcode:
for i := 0 to Liste.Count - 1 do
if Length(Liste[i]) > 8 then begin ... |
AW: sortierte Listen manipulieren
Zitat:
Delphi-Quellcode:
übernimmt die ersten bis zu 8 Zeichen.
liste[i] := Copy(Liste[i], 1, 8);
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz