AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Nach .cvs Dateiauslesen string in Record schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Nach .cvs Dateiauslesen string in Record schreiben

Ein Thema von Osse · begonnen am 30. Mai 2005 · letzter Beitrag vom 30. Mai 2005
 
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Nach .cvs Dateiauslesen string in Record schreiben

  Alt 30. Mai 2005, 13:03
Danke an alle.

Hab das jetzt mit Zeigern gelöst.

Bin ich zunächst nicht drauf gekommen

Falls jemand das gleiche Problem hat:
Delphi-Quellcode:

//******************************************************************************
// Auslesen der .csv Datei und schreiben in ein Record vom Typ RCVMsg. Zunächst
// wird der Kopf der Datei abgeschnitten und anschließend werden die Daten
// ausgelesen. Dabei wird die eingelesen Reihe aus der Dateí in einen sting
// zwischengespeichert. Anschließend wird dann dieser String zerlegt und in den
// Record geschrieben. Dies geschieht mit Hilfe von Pointern, die die jeweiligen
// Bezugspunkte angeben.
//
// Eingabeparameter :    - Dateiname   : Name und Pfad der zu öffnenden Datei
//
// Rückgabewert :            ------
//******************************************************************************
procedure TForm1.DateiAuslesen(Dateiname : string);
var
   datei : textFile;
  Einlesestring : string; //Der eingelesene String wird
  Zwischenspeicher : string; //Hier wird der Ausgabestring gespeichert
   zaehler : Integer; //Hilfsvariable
   Stringzaehler : Integer; //zählt die einzelnen Felder des eingelesenen Strings hoch
   Recordeintrag : Integer; //Zähler für die einzelnen Recordeinträge
   EinleseRCVMsg : TCANRcvMsg; //Zwischenspeicher für die ausgelesenen Nachrichten
  Abstandszaehler : cardinal; //wenn kein Trennzeichen gefunden wurde, dann Daten Ausgeben
  ZeigerAnfangEinlesestring, ZeigerEndeEinlesestring : PChar; //Zeiger auf Anfang und ende, beim Auslesen der Daten
begin
   Assignfile(Datei, Dateiname);
   Reset(Datei);                           // Datei zurücksetzen
   for zaehler := 0 to 7 do // Anfang auslesen und abschneiden
      readln(Datei,Einlesestring);
   while not EOF(Datei) do
      begin // Datei auslesen
         readln(Datei,Einlesestring); // eine Zeile auslesen
         Recordeintrag := 0; // Record initalisieren, da immer ein Eintrag höher gezählt wird
      Abstandszaehler := 0;
      ZeigerAnfangEinlesestring := Pchar(Einlesestring); //Zeiger auf den beginn des Strings setzen
      for Stringzaehler := 1 to Length(Einlesestring)+1 do //einmal den gesamten eingelesenen string durchlaufen
            begin // String auslesen //Ausgabe entwerder wenn Trennzeichen gefunden oder String am Ende
               if (Einlesestring[Stringzaehler] = ';') or (Stringzaehler = (Length(Einlesestring)+1)) then
                  begin
                     inc(Recordeintrag); //in den nächsten Recordeintrag schreiben
              ZeigerEndeEinlesestring := ZeigerAnfangEinlesestring + Abstandszaehler; // Ende des auszulesenden Strings berechnen
              // String schreiben, in den berechneten grenzen
              SetString(Zwischenspeicher, ZeigerAnfangEinlesestring, ZeigerEndeEinlesestring - ZeigerAnfangEinlesestring);
              // Ergebnis in Record schreiben
                     case Recordeintrag of
                        1: EinleseRCVMsg.msgbuff.ID := StrToInt(Zwischenspeicher);
                2: EinleseRCVMsg.msgbuff.MSGTYPE             := StrToInt(Zwischenspeicher);
                        3: EinleseRCVMsg.msgbuff.LEN             := StrToInt(Zwischenspeicher);
                        4: EinleseRCVMsg.msgbuff.DATA[0]             := StrToInt(Zwischenspeicher);
                        5: EinleseRCVMsg.msgbuff.DATA[1]               := StrToInt(Zwischenspeicher);
                        6: EinleseRCVMsg.msgbuff.DATA[2]             := StrToInt(Zwischenspeicher);
                        7: EinleseRCVMsg.msgbuff.DATA[3]             := StrToInt(Zwischenspeicher);
                        8: EinleseRCVMsg.msgbuff.DATA[4]             := StrToInt(Zwischenspeicher);
                        9: EinleseRCVMsg.msgbuff.DATA[5]             := StrToInt(Zwischenspeicher);
                        10: EinleseRCVMsg.msgbuff.DATA[6]             := StrToInt(Zwischenspeicher);
                       11: EinleseRCVMsg.msgbuff.DATA[7]             := StrToInt(Zwischenspeicher);
                        12: EinleseRCVMsg.hNet             := StrToInt(Zwischenspeicher);
                        13: EinleseRCVMsg.rcvtime.millis                := StrToInt(Zwischenspeicher);
                        14: EinleseRCVMsg.rcvtime.millis_overflow := StrToInt(Zwischenspeicher);
                        15: EinleseRCVMsg.rcvtime.micros := StrToInt(Zwischenspeicher);
                     end; // case
              ZeigerAnfangEinlesestring := ZeigerEndeEinlesestring+1; // neuen Anfangspunkt bestimmen
              Abstandszaehler := 0; // hilfszäher zurücksetzen, der den Absatnd zwischen
                                                                      // Anfang und Ende angibt
            end
          else // wenn kein Trennzeichen gefunden wurde, dann ist eine Zeichen-
                   begin // kette vorhanden. Es wird der abstand erhöht
                     inc(Abstandszaehler);
                   end;
            end; // String auslesen
        RcvMsgList.UpdateMsg(   EinleseRCVMsg.msgbuff,
                                             EinleseRCVMsg.hNet,
                                             EinleseRCVMsg.rcvtime.millis);
      end; // Datei auslesen
end;
  Mit Zitat antworten Zitat
 


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 00:20 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