AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

Ein Thema von Lulle · begonnen am 16. Jun 2012 · letzter Beitrag vom 17. Jun 2012
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

  Alt 16. Jun 2012, 12:10
Arbeiten wir doch zuerst an der Problembeschreibung:

- du lädst in eine Memo eine CSV-Tabelle. Sie besteht aus mit Tab getrennten Spalten.
- Eine der Spalten enthält Zahlenwerte. Diese Zahlenwerte sollen verändert werden.

Habe ich das korrekt verstanden?

//Edit:

Sollte ich es richtig verstanden haben, kann ich seit einer halben Stunde eine einfache Lösung anbieten. Wenn keine Antwort kommt, gehe ich davon aus, dass ich es falsch verstanden habe.

Geändert von Popov (16. Jun 2012 um 12:48 Uhr)
  Mit Zitat antworten Zitat
marabu

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

AW: inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

  Alt 16. Jun 2012, 13:17
Wesentlich ist hier die Trennung von Datenmodell und Darstellung: Das Memo ist keine Datenstruktur, sondern eine Form der Visualisierung.
Die Verarbeitung von DelimitedText geschieht wohl immer noch mit TStringList oder etwas vergleichbarem.
Und dazu gibt es auch sicher zwei Beispiele, wenn man nach CSV oder DelimitedText sucht.

Grüße vom marabu
  Mit Zitat antworten Zitat
Lulle

Registriert seit: 16. Jun 2012
5 Beiträge
 
#3

AW: inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

  Alt 16. Jun 2012, 15:35
@ popov,
jo du hast es im prinzip richtig verstanden,
deine einfache lösung würde ich gerne sehen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

  Alt 16. Jun 2012, 15:44
Suche doch einfach nach den Stichworten, die Achim dir vorgegeben hat.

Eine Stringliste besitzt die Eigenschaft .DelimitedText, durch Zuweisung eines Strings wird dieser dann, anhand des in der Eigenschaft .Delimiter festgelegten Trenners, getrennt.
Markus Kinzler
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

  Alt 16. Jun 2012, 16:04
@Lulle

In hab in der Zwischenzeit das Beispiel in Funktionen zerlegt, da man es gelegentlich braucht:

Delphi-Quellcode:
function CellsInCsvLine(AText: String; ADelimiter: Char): Word;
begin
  with TStringList.Create do
  try
    Delimiter := ADelimiter;
    DelimitedText := AText;
    Result := Count;
  finally
    Free
  end;
end;

function ReadCsvLineCell(AText: String; ADelimiter: Char; Col: Word; var
  Value: String): Boolean;
begin
  Value := '';
  with TStringList.Create do
  try
    Delimiter := ADelimiter;
    DelimitedText := AText;
    Result := (Col <= Count) and (Col > 0);
    if Result then
      Value := Strings[Col - 1];
  finally
    Free
  end;
end;

function ReplaceCsvLineCell(var AText: String; ADelimiter: Char; Col: Word;
  Value: String): Boolean;
begin
  with TStringList.Create do
  try
    Delimiter := ADelimiter;
    DelimitedText := AText;
    Result := (Col <= Count) and (Col > 0);
    if Result then
    begin
      Strings[Col - 1] := Value;
      AText := DelimitedText;
    end;
  finally Free end;
end;

procedure WriteCsvLineCell(var AText: String; ADelimiter: Char; Col: Word;
  Value: String);
begin
  with TStringList.Create do
  try
    if Col <= 0 then Exit;
    Delimiter := ADelimiter;
    DelimitedText := AText;
    while Col > Count do
      Add('');
    Strings[Col - 1] := Value;
    AText := DelimitedText;
  finally Free end;
end;
Parameter:
Code:
AText ist eine Zeile aus der Csv Tabelle
ADelimiter das Trennzeichen
Col die Spalte
Value der Wert der Spalte
Beispiele:
Delphi-Quellcode:
var
  sText, Value: String;
begin
  if ReadCsvLineCell(Memo1.Lines[0], ' ', 4, Value) then
    ShowMessage(Value) else
    ShowMessage('#Fehler#1');

  sText := Memo1.Lines[0];
  Value := '24';
  if ReplaceCsvLineCell(sText, ' ', 4, Value) then
    Memo1.Lines[0] := sText else
    ShowMessage('#Fehler#2');

  {sText := Memo1.Lines[0];
  Value := '24';
  WriteCsvLineCell(sText, ' ', 10,  Value);
  Memo1.Lines[0] := sText;}


  ShowMessage(IntToStr(CellsInCsvLine(Memo1.Lines[0], ' ')));
end;
CellsInCsvLine gibt die Anzahl der Spalten
ReadCsvLineCell liest eine Zelle aus, gibt False zurück wenn Zelle nicht vorhanden
ReplaceCsvLineCell ersetzt eine Zelle, gibt False zurück wenn Zelle nicht vorhanden
WriteCsvLineCell wie Replace, wenn Zelle fehlt, wird die Zeile um die Anzahl Spalten erweitert

//Edit:

Ich hab den Code gerade vereinfacht, da ich ihn vorher aus einem alten Delphi 3 Code kopiert habe und es da noch kein DelimitedText gab. Hier jetzt also die moderne Version, allerdings erst ab Delphi 6.

Geändert von Popov (16. Jun 2012 um 21:28 Uhr) Grund: Fehler beseitig
  Mit Zitat antworten Zitat
Lulle

Registriert seit: 16. Jun 2012
5 Beiträge
 
#6

AW: inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

  Alt 16. Jun 2012, 17:01
wow das sieht ja ziemlich stark aus.
ich versuch mal das alles nachzuvollziehen und probier's dann mal aus.
danke für die schnelle hilfe
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

  Alt 16. Jun 2012, 21:37
Warum überall der Datentyp Word und nicht Integer?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Lulle

Registriert seit: 16. Jun 2012
5 Beiträge
 
#8

AW: inhalt an bestimmter position im memo auslesen, verändern und wieder abspeichern

  Alt 17. Jun 2012, 14:38
so. ich hab jetzt alles hinbekommen, musste noch n paar veränderungen vornehmen, dass alles auf meinen speziellen fall zugeschnitten ist, aber jetzt läufts.


großen dank an popov

gruß lulle
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:19 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-2025 by Thomas Breitkreuz