AGB  ·  Datenschutz  ·  Impressum  







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

csv read

Ein Thema von value is NULL · begonnen am 29. Sep 2010 · letzter Beitrag vom 5. Okt 2010
Antwort Antwort
Seite 1 von 2  1 2      
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#1

csv read

  Alt 29. Sep 2010, 09:03
Hi Delphianer, habe eine neue herausforderung (für mich zumindest ) da ich mit csv noch nie zu tun hatte

mein csv file sieht wie folgt aus:

Code:
Firma;Channel;MAC
A;1;x
A;2;x
A;3;x
A;4;x
A;5;x
B;6;x
B;7;x
Meine Aufgabe besteht darin, Alle Einträge für Firma A (in diesem Fall Channel 1-4 und Mac x - x) in ein xml zu schreiben. Jedoch scheitere ich schon am auslesen.
Habe hier im Forum folgende unit gefunden:

http://www.delphipraxis.net/110025-c...v-dateien.html

Die ist prinzipiell super, aabbbeerrr wenn ich folgenden code verwende:

Delphi-Quellcode:
var
  csvreader : TCsvReader;
  sData : TFilestream;
  i : integer;

begin
  sData := TFilestream.Create('M:\modules Delphi\CSVreader\config.csv',fmopenread);
  csvReader := TCSVReader.Create (sData, ';');
  csvReader.First;
  try
    while not csvreader.Eof do begin
      for i:=0 to csvreader.columncount -1 do
        Writeln(csvreader.Columns[i]);
      csvreader.Next;
    end;
  finally
    csvreader.Free;
    sdata.Free;
  end;
end.
bekomme ich folgendes Ergebnis:

Code:
Firma
Channel
MAC
A
1
X
A
2
X
A
3
X
A
4
X
A
5
X
B
6
X
B
7
X
Wie könnte ich das Firmenbezogen machen bzw. hat jemand ein Beispiel wie das funktionieren könnte?

Danke im Voraus

LG
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: csv read

  Alt 29. Sep 2010, 09:16
Du müsstest csvReader.Columns[0] auf die richtige Firma prüfen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#3

AW: csv read

  Alt 29. Sep 2010, 09:36
das bedeutet für mich was?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

AW: csv read

  Alt 29. Sep 2010, 09:44
Eine Abfrage einzubauen?
Delphi-Quellcode:
var
  csvreader : TCsvReader;
  sData : TFilestream;
  i : integer;

begin
  sData := TFilestream.Create('M:\modules Delphi\CSVreader\config.csv',fmopenread);
  csvReader := TCSVReader.Create (sData, ';');
  csvReader.First;
  try
    while not csvreader.Eof do begin
      //nur Firma 'A'
      if csvreader.Columns[0] = 'Athen
        for i:=0 to csvreader.columncount -1 do
          Writeln(csvreader.Columns[i]);
      csvreader.Next;
    end;
  finally
    csvreader.Free;
    sdata.Free;
  end;
end.
Vorher würde ich aber noch sicherstellen, dass auch Columns vorhanden sind, aber ich war zu faul, mir die Klasse jetzt anzuschauen (vermutlich geht Columns.Count).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#5

AW: csv read

  Alt 29. Sep 2010, 11:42
ok das funkt gut, bekomme jetzt praktisch alle spalten welche mit Firma A zu tun haben.

Aber wie funktioniert das dann, wenn ich zB sagen möchte:

*) Alle zeilen für Firma a auslesen
*) Alle Channels und MAC Adressen, welche gefunden wurden in ein Textfile schreiben: Channel 1 = MAC X

weiß leider nicht wie ich das anstellen soll
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: csv read

  Alt 29. Sep 2010, 11:45
Hallo,

ich würde eine TStringList nehmen (Stichwort Delimiter und DelimitedText),
Damit werden die Daten einer Zeile gelesen.
Wie du die dann weiterverarbeitest, ist deine Sache (ich würde eine Klasse + TList nehmen).


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

AW: csv read

  Alt 29. Sep 2010, 11:56
Delphi-Quellcode:
var
  csvreader : TCsvReader;
  sData : TFilestream;
  sList: TStringList;
  i : integer;

begin
  sData := TFilestream.Create('M:\modules Delphi\CSVreader\config.csv',fmopenread);
  try
    csvReader := TCSVReader.Create (sData, ';');
    try
      sList := TStringList.Create;
      try
        csvReader.First;
        while not csvreader.Eof do begin
          //nur Firma 'A'
          if csvreader.Columns[0] = 'Athen
            sList.Add(Format('Channel %s = MAC %s',[csvreader.Columns[1],csvreader.Columns[2]));
          csvreader.Next;
        end;
        sList.SaveToFile(<Dateiname>); //hier Dateinamen eintragen
      finally
        sList.Free;
      end;
    finally
      csvreader.Free;
    end;
  finally
    sdata.Free;
  end;
end.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: csv read

  Alt 29. Sep 2010, 12:20
Warum so kompliziert, wenn es doch so schön einfach geht:
Delphi-Quellcode:
  var
    con : TADOConnection;
    qry : TADOQuery;
    MyFile : string;
  begin
    MyFile := 'M:\modules Delphi\CSVreader\config.csv';
    con := TADOConnection.Create( nil );
    try
      con.ConnectionString := 'Driver={Microsoft Text-Treiber (*.txt; *.csv)};Extensions=asc,csv,tab,txt;';
      con.LoginPrompt := False;
      con.DefaultDatabase := ExtractFileDir( MyFile );
      con.Open;
      try
        qry := TADOQuery.Create( con );
        qry.Connection := con;
        qry.SQL.Text := Format( 'SELECT * FROM %s WHERE Firma = %s', [ ExtractFileName( MyFile ), QuotedStr( 'A' ) ] );
        qry.Open;
        try
          while not qry.Eof do
            begin
              // Verarbeitung der Daten z.B. mit qry.FieldByName( 'Firma' ).AsString
              qry.Next;
            end;
        finally
          qry.Close;
        end;
      finally
        con.Close;
      end;
    finally
      con.Free;
    end;
  end;
Es wird in dem Verzeichnis mit den Daten aber auch noch die Datei schema.ini benötigt
In deinem Fall sollte folgender Inhalt genügen
Code:
[config.csv]
Format=Delimited(;)
Man könnte alternativ die Daten auch mit TADOTable auslesen und dann einen Filter setzen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Tossi65

Registriert seit: 5. Mär 2005
21 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: csv read

  Alt 29. Sep 2010, 12:39
@Sir Rufo
Das ist ja geil!! Man lernt nie aus. Muss man bei dieser Methode auf
irgendeine MSDac Version achten oder ist es Basisbestandteil von ADO??

Danke Torsten
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: csv read

  Alt 29. Sep 2010, 12:42
Das ist eine gute Frage ... ich halte es da wie die Hummel ... ich mach es einfach und es klappt

Bisher hatte ich bei keiner Windows-Version damit Probleme (selbst nackig installierte Systeme)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:54 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