AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Thema durchsuchen
Ansicht
Themen-Optionen

.csv Datei einlesen, analysieren und bearbeitet abspeichern.

Ein Thema von Dade · begonnen am 18. Apr 2015 · letzter Beitrag vom 4. Mai 2015
Antwort Antwort
Seite 1 von 2  1 2      
Dade

Registriert seit: 18. Apr 2015
20 Beiträge
 
#1

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 18. Apr 2015, 22:26
Oh,
ja, also ich nutze: Delphi XE7 und bekam diese Fehler:


[dcc32 Error] Unit1.pas(28): E2029 Statement expected but 'USES' found
[dcc32 Error] Unit1.pas(29): E2003 Undeclared identifier: 'FileCtrl'
[dcc32 Error] Unit1.pas(31): E2070 Unknown directive: 'GetFiles'
[dcc32 Warning] Unit1.pas(33): W1002 Symbol 'faArchive' is specific to a platform
[dcc32 Warning] Unit1.pas(33): W1002 Symbol 'faHidden' is specific to a platform
[dcc32 Warning] Unit1.pas(33): W1002 Symbol 'faSysFile' is specific to a platform
[dcc32 Error] Unit1.pas(37): E2003 Undeclared identifier: 'Path'
[dcc32 Error] Unit1.pas(37): E2250 There is no overloaded version of 'IncludeTrailingBackslash' that can be called with these arguments
[dcc32 Warning] Unit1.pas(37): W1002 Symbol 'IncludeTrailingBackslash' is specific to a platform
[dcc32 Error] Unit1.pas(39): E2003 Undeclared identifier: 'ExtMask'
[dcc32 Error] Unit1.pas(39): E2008 Incompatible types
[dcc32 Error] Unit1.pas(41): E2010 Incompatible types: 'string' and 'Integer'
[dcc32 Error] Unit1.pas(43): E2250 There is no overloaded version of 'SameText' that can be called with these arguments
[dcc32 Error] Unit1.pas(44): E2003 Undeclared identifier: 'List'
[dcc32 Error] Unit1.pas(46): E2003 Undeclared identifier: 'SysUtils'
[dcc32 Error] Unit1.pas(49): E2070 Unknown directive: 'TForm1'
[dcc32 Error] Unit1.pas(60): E2003 Undeclared identifier: 'SelectDirectory'
[dcc32 Error] Unit1.pas(60): E2003 Undeclared identifier: 'sdAllowCreate'
[dcc32 Error] Unit1.pas(60): E2003 Undeclared identifier: 'sdPerformCreate'
[dcc32 Error] Unit1.pas(60): E2003 Undeclared identifier: 'sdPrompt'
[dcc32 Error] Unit1.pas(68): E2003 Undeclared identifier: 'GetFiles'
[dcc32 Error] Unit1.pas(80): E2003 Undeclared identifier: 'SaveDialog1'
[dcc32 Error] Unit1.pas(83): E2003 Undeclared identifier: 'Execute'
[dcc32 Error] Unit1.pas(88): E2003 Undeclared identifier: 'FileName'
[dcc32 Error] Unit1.pas(88): E2250 There is no overloaded version of 'ChangeFileExt' that can be called with these arguments
[dcc32 Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'


Damit bekomme ich bestimmt keine .exe.


So habe ich deinen Code eingesetzt in das Fenster, das kommt, wenn ich einen tbutton einfüge und diesen doppelt anklicke:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
uses
  FileCtrl;

procedure GetFiles(Path, ExtMask: String; List: TStrings);
const
  Attrib = faArchive or faReadOnly or faHidden or faSysFile;
var
  SR: TSearchRec;
begin
  Path := IncludeTrailingBackslash(Path);

  while Copy(ExtMask, 1, 1) = '.do Delete(ExtMask, 1, 1);

  if FindFirst(Path + '*.' + ExtMask, Attrib, SR) = 0 then
  repeat
    if SameText('.' + ExtMask, ExtractFileExt(SR.Name)) then
      List.Add(Path + SR.Name);
  until FindNext(SR) <> 0;
  SysUtils.FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  VorneZeilenIgnorieren,
  HintenZeilenIgnorieren,
  i, k: Integer;
  Dir, OutPath: String;
  slDateiListe, slGrosseCsv, slEinzelCsv, slTemp: TStringList;
begin
  VorneZeilenIgnorieren := 0; //2;
  HintenZeilenIgnorieren := 0; //5;

  if not SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then
  begin
    MessageDlg('Kein Ordner ausgewählt.', mtError, [mbOk], 0);
    Exit;
  end;

  slDateiListe := TStringList.Create;
  try
    GetFiles(Dir, 'csv', slDateiListe);

    if slDateiListe.Count = 0 then
    begin
      MessageDlg('Kein Dateien gefunden.', mtError, [mbOk], 0);
      Exit;
    end
    else
      if MessageDlg(Format('%d CSV-Dateien gefunden. Weitermachen?', [slDateiListe.Count]),
        mtConfirmation, [mbYes, mbNo], 0) = mrNo then
          Exit;

    with SaveDialog1 do
    begin
      //Filter := 'CSV-Dateien|*.csv';
      if not Execute then
      begin
        MessageDlg('Vorgang Abgebrochen.', mtError, [mbOk], 0);
        Exit;
      end;
      OutPath := ChangeFileExt(FileName, '.csv');
      if FileExists(OutPath) then
        if MessageDlg('Datei bereits vorhanden. Überschreiben?.',
          mtConfirmation, [mbYes, mbNo], 0) = mrNo then
            Exit;;
    end;

    slGrosseCsv := TStringList.Create;
    try
      for i := 0 to slDateiListe.Count - 1 do
      begin
        slEinzelCsv := TStringList.Create;
        try
          slEinzelCsv.LoadFromFile(slDateiListe[i]);

          //In den csv-Dateien stimmt was nicht, zumindest kommt StringList
          //damit nicht klar. Schnelle Lösung. Es gibt fehlermeldungen, die
          //werden aber ignoriert.
          slTemp := TStringList.Create;
          try
            for k := 0 to slEinzelCsv.Capacity - 1 do
            try
              if Length(slEinzelCsv[k]) > 0 then
              slTemp.Add(slEinzelCsv[k]);
            except
              //Fehler Ignorieren
            end;
            slEinzelCsv.Text := slTemp.Text;
          finally
            slTemp.Free;
          end;

          //Entfernt vorne Zeilen, wenn gewünscht
          k := VorneZeilenIgnorieren;
          while (slEinzelCsv.Count > 0) and (k > 0) do
          begin
            slEinzelCsv.Delete(0);
            Dec(k);
          end;

          //Entfernt vorne Zeilen, wenn gewünscht
          k := HintenZeilenIgnorieren;
          while (slEinzelCsv.Count > 0) and (k > 0) do
          begin
            slEinzelCsv.Delete(slEinzelCsv.Count - 1);
            Dec(k);
          end;

          slGrosseCsv.AddStrings(slEinzelCsv);
        finally
          slEinzelCsv.Free;
        end;
      end;

      slGrosseCsv.SaveToFile(OutPath);
      MessageDlg('CSV-Dateien zusammengefügt und erfolgreich gespeichert ' +
        'unter: "' + OutPath + '".', mtInformation, [mbOk], 0);
    finally
      slGrosseCsv.Free;
    end;
  finally
    slDateiListe.Free;
  end;
end;
end;

Geändert von Dade (18. Apr 2015 um 23:45 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 18. Apr 2015, 22:32
Dade, du bist fast ein Doktor. Sowas verpflichtet. Drück bitte noch mal auf BEARBEITEN und setz den Delphi Code in Delphi-Tags:
Code:
[DELPHI]Hier dein Code[/DELPHI]
  Mit Zitat antworten Zitat
Dade

Registriert seit: 18. Apr 2015
20 Beiträge
 
#3

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 18. Apr 2015, 23:46
ok, gemacht.

Danke für den Hinweis
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 19. Apr 2015, 00:05
Zitat:
Delphi-Quellcode:
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Da ist wohl beim Kopieren etwas durcheinander geraten.
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
Dade

Registriert seit: 18. Apr 2015
20 Beiträge
 
#5

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 19. Apr 2015, 08:21
Guten Morgen,
danke für eure Hilfe. Das hätte ich ja gar nicht erwartet.

Ihr seid spitze!

Nur komme ich einfach nicht weiter.

Ich erstellte einen "tbutton" und darin setzte ich den code. Bekomme lauter Fehler.

Das Programm speicherte ich ab und lud es hier hoch: https://www.dropbox.com/sh/32uhaxoo8...rGJa?dl=0&s=sl (auch zusammen in test.rar)


Eben kam ein Hinweis, das etwas bei copy & paste falsch gelaufen sein sollte, aber die Programmzeile finde ich bereits im code.

Die Zeile "{----------------------------------}" dient nur als Trennung von dem Delphi - vorgegebenen und dem Code von euch.

Delphi-Quellcode:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
{-------------------------------}

uses
  FileCtrl;

procedure GetFiles(Path, ExtMask: String; List: TStrings);
const
  Attrib = faArchive or faReadOnly or faHidden or faSysFile;
var
  SR: TSearchRec;
begin
  Path := IncludeTrailingBackslash(Path);

  while Copy(ExtMask, 1, 1) = '.do Delete(ExtMask, 1, 1);

  if FindFirst(Path + '*.' + ExtMask, Attrib, SR) = 0 then
  repeat
    if SameText('.' + ExtMask, ExtractFileExt(SR.Name)) then
      List.Add(Path + SR.Name);
  until FindNext(SR) <> 0;
  SysUtils.FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  VorneZeilenIgnorieren,
  HintenZeilenIgnorieren,
  i, k: Integer;
  Dir, OutPath: String;
  slDateiListe, slGrosseCsv, slEinzelCsv, slTemp: TStringList;
begin
  VorneZeilenIgnorieren := 0; //2;
  HintenZeilenIgnorieren := 0; //5;

  if not SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then
  begin
    MessageDlg('Kein Ordner ausgewählt.', mtError, [mbOk], 0);
    Exit;
  end;

  slDateiListe := TStringList.Create;
  try
    GetFiles(Dir, 'csv', slDateiListe);

    if slDateiListe.Count = 0 then
    begin
      MessageDlg('Kein Dateien gefunden.', mtError, [mbOk], 0);
      Exit;
    end
    else
      if MessageDlg(Format('%d CSV-Dateien gefunden. Weitermachen?', [slDateiListe.Count]),
        mtConfirmation, [mbYes, mbNo], 0) = mrNo then
          Exit;

    with SaveDialog1 do
    begin
      //Filter := 'CSV-Dateien|*.csv';
      if not Execute then
      begin
        MessageDlg('Vorgang Abgebrochen.', mtError, [mbOk], 0);
        Exit;
      end;
      OutPath := ChangeFileExt(FileName, '.csv');
      if FileExists(OutPath) then
        if MessageDlg('Datei bereits vorhanden. Überschreiben?.',
          mtConfirmation, [mbYes, mbNo], 0) = mrNo then
            Exit;;
    end;

    slGrosseCsv := TStringList.Create;
    try
      for i := 0 to slDateiListe.Count - 1 do
      begin
        slEinzelCsv := TStringList.Create;
        try
          slEinzelCsv.LoadFromFile(slDateiListe[i]);

          //In den csv-Dateien stimmt was nicht, zumindest kommt StringList
          //damit nicht klar. Schnelle Lösung. Es gibt fehlermeldungen, die
          //werden aber ignoriert.
          slTemp := TStringList.Create;
          try
            for k := 0 to slEinzelCsv.Capacity - 1 do
            try
              if Length(slEinzelCsv[k]) > 0 then
              slTemp.Add(slEinzelCsv[k]);
            except
              //Fehler Ignorieren
            end;
            slEinzelCsv.Text := slTemp.Text;
          finally
            slTemp.Free;
          end;

          //Entfernt vorne Zeilen, wenn gewünscht
          k := VorneZeilenIgnorieren;
          while (slEinzelCsv.Count > 0) and (k > 0) do
          begin
            slEinzelCsv.Delete(0);
            Dec(k);
          end;

          //Entfernt vorne Zeilen, wenn gewünscht
          k := HintenZeilenIgnorieren;
          while (slEinzelCsv.Count > 0) and (k > 0) do
          begin
            slEinzelCsv.Delete(slEinzelCsv.Count - 1);
            Dec(k);
          end;

          slGrosseCsv.AddStrings(slEinzelCsv);
        finally
          slEinzelCsv.Free;
        end;
      end;

      slGrosseCsv.SaveToFile(OutPath);
      MessageDlg('CSV-Dateien zusammengefügt und erfolgreich gespeichert ' +
        'unter: "' + OutPath + '".', mtInformation, [mbOk], 0);
    finally
      slGrosseCsv.Free;
    end;
  finally
    slDateiListe.Free;
  end;
end;


{-------------------------------}
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#6

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 19. Apr 2015, 09:50
"Falsch gelaufen" ist gut.

Du kopierst fast den Inhalt einer kompletten Unit (mehrere Prozeduren inkl. Uses-Abschnitt) in eine Prozedur rein, wo natürlich nur der Inhalt einer einzelnen Prozedur rein gehört ... das kann einfach nicht gehn.
Und genau das hat dir auch der Compiler gesagt, also daß er an dieser Stelle kein "unit" haben will.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Apr 2015 um 09:53 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 19. Apr 2015, 13:30
@Dade

Das hat irgendwie keinen Zweck. Anscheinend kopierst du alles ohne überhaupt zu gucken was du wo kopierst. Also eigentlich dachte ich, dass Copy&Paste die einfachste Art der Programmierung sind, aber selbst das muss man mit etwas Überlegung machen. Wie kann man einen ganzen Text mit zwei Prozeduren nehmen und ohne Überlegung einfach irgendwo rein kopieren?

Mich hat der Fehler von gestern etwas beschäftigt. Warum es gestern den Fehler gab, ich weiß es nicht, heute war er nicht da. Also habe ich noch paar Buttons dazu gefügt, alles auf drei Prozeduren aufgeteilt und ein fertiges Programm erstellt. Das kannst du haben, denn sonst wärst du schneller wenn du alles von Hand zusammenfügst.
Angehängte Dateien
Dateityp: zip CSV-Zusammenfuegen.zip (6,0 KB, 33x aufgerufen)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 3. Mai 2015, 13:09
Ist m.E. ein klassisches Freelancer Project (Ohne Grundlagen gehts halt nicht..)
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
uses
  FileCtrl;
  ..
Damit bekomme ich bestimmt keine .exe.
Was mache ich falsch?
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 4. Mai 2015, 07:16
Also, *wenn* das eine Doktorarbeit sein soll, dann würde ich mal sagen: Durchgefallen. Setzen. Sechs.

Denn zu einer Doktorarbeit (und zu akademischer Arbeit, ach was sag ich, Arbeit allgemein) gehört auch Planung, und wenn man sich das hier anschaut, dann fehlt das komplett, zumindest was die Auswertung anbelangt. So frei nach dem Motto: Erstmal sammeln, fürs Auswerten findet sich schon ein Dummer.

Und später wirst Du dann den Bauch des Patienten öffnen, aber beim wieder-zunähen einen Hilferuf im Ärzteforum posten?

Und falls Dir das alles bewusst ist, dann lass mal die Hosen runter und biete einen Preis dafür, das man Dir deinen Doktortitel rettet. Und dieser Preis (ich würde ja nach tageweise nach Aufwand abrechnen) ist immer noch viel zu niedrig, im Vergleich für den Gegenwert (akademischer Abschluss).

Ich war mal einer der Dumpfköppe, die als Hiwi für so eine Doktorarbeit Daten eingetrommelt hat. Wir kamen uns zwar irgendwie ausgenutzt vor, aber der Deal war ok: Wir wollten einen Schein und er wollte seine Doktorarbeit (bzw. die Daten). Ausgewertet hat er das übrigens selbst, weil Teil seines Plans das Format der Exceltabellen war: Er hatte sich vorher überlegt, wie wir die Daten in Excel ablegen sollen, sodass er mit moderatem Aufwand auswerten kann.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 4. Mai 2015, 07:53
Vielleicht schießt Du da etwas übers Ziel hinaus.
Es ist nicht seine Doktorarbeit. Eine Bildauswertungs -vermessungssoftware ist jetzt auch nicht unbedingt etwas, was man wie eine Textverarbeitung mal eben irgendwo herbekommt oder tauscht, ebenso die Statistiksoftware. Ich habe noch nie mit sowas gearbeitet, keine Ahnung was solche Systeme leisten könn(t)en.

Ja, die Herangehensweise ist fragwürdig, sicher kann man das alles planen und ja, vielleicht muss da jetzt ein Profi ran oder ein Märtyrer im Dienste der Wissenschaft. Da der TE nicht mehr postet, gehe ich sowieso davon aus, dass der Drops gelutscht ist (durch einen Profi, einen Selbstausbeuter oder was auch immer)
Und ohne die Details zu kennen, Excel würde ich nun auch nicht unbedingt einen Plan nennen (also vielleicht, aber höchstens beim A-Team).
Gruß, Jo
  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 18:31 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