Angebotsprogramm

Anfängerfragen zum Programmieren mit PureBasic.
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

ja, ja bitte!!!!

Beitrag von hiltwin »

Kiffi hat geschrieben:> Sollen wir Dir einen kleinen Beispielsource posten, der eine CSV-Datei
einliest?

Grüße ... Kiffi
Ja bitte - und am besten auch gleich das Gegenstück zum Auslesen /:-> - weil ich doch jetzt auch den Zitierknopf gefunden habe :allright:
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

vonTurnundTaxis hat geschrieben:@Mauli:
Was macht denn UpdateString()?
Na ich schätze mal dasselbe was ein SQL-Update macht, Daten ändern.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

@Mauli: das Programm sieht ja ziemlich professionell aus. Etwas Ähnlichkeit mit SAP/R3... :mrgreen:

Verkaufst Du das auch oder ist es nur für den Eigenbedarf?
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von PAMKKKKK »

@freedimension
Kiffi hat geschrieben:
freedimension hat geschrieben::( *streitbarriere_erricht* :)
ach! Wir streiten doch nicht. Wir diskutieren! :D
Kiffi und ich Diskutieren halt gerne :wink: Ausserdem habe ich ihn schon zu meinem Lieblingsfeind erklärt.Bild
Peter+Peter streiten sich gern :lol:
Mauli hat geschrieben: ich habe mich mit SQL lange beschäftig und sehe wirklich ein, daß es eine großartige Sache ist, aber ich war schlichtweg zu Faul, das Programm (6000) Zeilen auf MySQL3 umzuschreiben.
Eben deshalb sollte man erst garnicht mit CSV anfangen......grummel, grummel, grummel
Mauli hat geschrieben:Finde es auch so sehr gut und kann es jedem nur Raten, erstmal damit zu arbeiten, bevor man sich ans SQL wagt. Ich bin sehr zufriefen und sehe keinen Grund zu wechseln.
Kann ich niemanden raten! (bei Professionellen Programmen) :roll:
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Benutzeravatar
Mauli
Beiträge: 46
Registriert: 06.09.2004 13:27

Beitrag von Mauli »

Das Programm heißt nun KS-Auftrag, und KS-Cash wobei das "K" im Logo gespiegelt ist. Der Screenshot ist von der alten Version - werde heute abend mal die Aktuellen Screenshots servieren. Sieht noch besser aus !

Ne Vorlage hatte ich nicht dafür, einfach drauflos und fertig. Nach meinen Bedürfnissen ohne viel geklicke schnell zum Ergebnis und vorallem alles auf einem Blick, ohne suchen. Tja, da ist das Ergebnis ... habe es bisher (leider) nur 4x verkauft aber ich arbeite dran .
Benutzeravatar
Then
Beiträge: 284
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Beitrag von Then »

@Mauli : bin mal gespannt - sieht aber sehr vielversprechend aus. Endlich mal was anderes als Spiele und DEMOs. Ne vernünftige Anwendung die auch wirklich genutzt wird und nen Sinn hat. So soll es sein.
Mein CNC-Commander zum Fräsen habe ich nun schon 23 mal verkauft und gutes Geld verdient. Eine größere Firma will mir sofort 50-70 Stück abkaufen, wenn deren Fräsen auch damit laufen - muß es extra anpassen und deren Logo mit einbinden. Dann winkt erstrecht Kohle ! :D

Naja, weiter so ! Solche kompletten Anwendungen die wirklich funktionieren und eingesetzt werden lobe ich mir - egal ob SQL oder CSV. Jedem das was er am besten kann, bzw, was am schnellsten ist !
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
Mauli
Beiträge: 46
Registriert: 06.09.2004 13:27

Beitrag von Mauli »

UpdateString(Nummer, Position, Wert) ist wie der SQL Befehl. Er Updatet den jeweiligen Wert mit + oder - !

Tja, alles recht fix !
Benutzeravatar
Mauli
Beiträge: 46
Registriert: 06.09.2004 13:27

Beitrag von Mauli »

So, hier nu die aktuellsten Screenshots :

Bild

Bild

Da ich mich nun selbstständg machen werde, benötigte ich ein Programm, dessen Einarbeitung ich sparen wollte, also selbstgeschrieben und fertich ! Inkl. autom. Mahnwesen, RMA-Abwicklung (mit den dazugehörenden Formularen und Vordrucken) und allem was man benötigt (Rechnung, Liferschein oder Barverkauf (KS-Cash) )
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ja, ja bitte!!!!

Beitrag von Kiffi »

hiltwin hat geschrieben:
Kiffi hat geschrieben:> Sollen wir Dir einen kleinen Beispielsource posten, der eine CSV-Datei einliest?
- und am besten auch gleich das Gegenstück zum Auslesen /:->
äh, wenn Du mir jetzt noch den Unterschied zwischen Einlesen und Auslesen erklärst... ;-)
hiltwin hat geschrieben:Ja bitte
OK. Hier kommt der Code:

Code: Alles auswählen

Global CsvLines.l, CsvFields.l

Procedure ReadCSV(sFile.s)
  
  DefType.s sSeparator, sLine
  DefType.l FF, lLineCounter, lFieldCounter, lMaxFieldCounter
  
  sSeparator = ";"
  
  CsvLines  = -1
  CsvFields = -1
  
  FF = ReadFile(#PB_Any, sFile)
  
  If FF
    
    ; Pass 1
    ; Determine count of lines and fields
    
    While Eof(FF)=#False
      
      sLine = ReadString()
      
      If Trim(sLine) <> "" ; Line contains data?
        
        lLineCounter + 1
        
        lFieldCounter = CountString(sLine, sSeparator) + 1
        
        If lMaxFieldCounter < lFieldCounter
          lMaxFieldCounter = lFieldCounter
        EndIf
        
      EndIf
      
    Wend
    
    Debug "Found " + Str(lLineCounter) + " lines"
    Debug "Found " + Str(lMaxFieldCounter) + " fields"
    
    ; Dimension Array with determined informations
    
    CsvLines  = lLineCounter - 1
    CsvFields = lMaxFieldCounter - 1
    
    Dim FieldArray.s(CsvLines, CsvFields)
    
    ; Pass 2
    ; Read Data
    
    FileSeek(0) ; Jump to the start of the file
    
    lLineCounter = 0
    
    While Eof(FF)=#False
      
      sLine = ReadString()
      
      If Trim(sLine) <> "" ; Line contains data?
        
        For lFieldCounter = 1 To CountString(sLine, sSeparator) + 1
          FieldArray(lLineCounter, lFieldCounter-1) = StringField(sLine, lFieldCounter, sSeparator)
        Next lFieldCounter
        
        lLineCounter + 1
        
      EndIf
      
    Wend
    
    CloseFile(FF)
    
  Else
    
    ; Couldn't open file
    
  EndIf
  
EndProcedure

Enumeration
  #frmMain ; MainWindow
  #ligView ; ListIconGadget
EndEnumeration

DefType.s sLine
DefType.l lField, lLine

ReadCSV("test.csv")

If CsvFields > -1 And CsvLines > -1
  
  If OpenWindow(#frmMain, 0,0,420,200, #PB_Window_ScreenCentered|#PB_Window_SystemMenu, "Read CSV - Sample")
    
    If CreateGadgetList(WindowID(#frmMain))
      
      ; Use a ListIconGadget to view the read data
      
      ListIconGadget(#ligView, 0, 0, 420, 200, "Field0", 40, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
      
      ; Fill Columnheaders of ListIconGadget
      
      For lField = 1 To CsvFields 
        AddGadgetColumn(#ligView, lField, "Field" + Str(lField), 40)
      Next lField
      
      ; Fill data into ListIconGadget
      
      For lLine = 0 To CsvLines
        sLine = ""
        For lField = 0 To CsvFields
          sLine + FieldArray(lLine, lField)
          If lField <> CsvFields
            sLine + Chr(10)
          EndIf
        Next lField
        AddGadgetItem(#ligView, lLine, sLine)
      Next lLine
      
      Repeat
        
      Until WaitWindowEvent() = #PB_Event_CloseWindow
      
    EndIf
    
  EndIf
  
EndIf
Entsprechende Beispiel-CSV:

Code: Alles auswählen

00;01;02;03;04;05;06;07;08;09
10;11;12;13;14;15;16;17;18;19
20;21;22;23;24;25;26;27;28;29
30;31;32;33;34;35;36;37;38;39
40;41;42;43;44;45;46;47;48;49
50;51;52;53;54;55;56;57;58;59
60;61;62;63;64;65;66;67;68;69
70;71;72;73;74;75;76;77;78;79
80;81;82;83;84;85;86;87;88;89
90;91;92;93;94;95;96;97;98;99
Ein paar Anmerkungen zum Code:

1.) Es gibt verschiedene Arten und Weisen, CSV-Dateien einzulesen. Ich
habe mich für obige Variante entschieden, weil sie flexibel ist. Man muss
zuvor nicht wissen, wieviele Felder eine Zeile enthält. Das wird im ersten
Arbeitsschritt (Pass 1) ermittelt. Dadurch ist die Routine allerdings
langsamer, weil die Datei zweimal durchlaufen werden muss. Bei den
knapp 500 Artikeln, die Earl Grey anvisiert, dürfte dass allerdings kaum
in's Gewicht fallen.

Eine weitere Möglichkeit der Geschwindigkeitsoptimierung kann man
nutzen, wenn man die FastFile-Routinen von Rings aus dem PBOSL-Paket
anstelle der Standard-Dateibefehle von PureBasic verwendet

2.) Es kann sein, dass in einem Feld (beispielsweise der
Artikelbezeichnung oder -beschreibung) der Feldseparator (hier: das
Semikolon) als Satzzeichen verwendet wird. Damit dieses nicht als
Feldseparator angesehen wird, fasst man das Feld üblicherweise in
Textbegrenzer ein.

Beispiel:

Code: Alles auswählen

Artikelnummer0815;"Artikelbezeichnung;BlaBla";Artikelpreis
Man sieht: Obige Zeile hat 3 (!) Felder, weil das Semikolon als
Satzzeichen der Artikelbezeichnung zugehörig ist. Dafür sorgen die
Hochkommata am Anfang und Ende des Feldes.

Mein Code berücksichtigt das nicht!

Ich bin im Moment zu faul, um das noch einzubauen. ;-)

Grüße ... Kiffi
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Re: ja, ja bitte!!!!

Beitrag von freedimension »

Kiffi hat geschrieben:2.) Es kann sein, dass in einem Feld (beispielsweise der
Artikelbezeichnung oder -beschreibung) der Feldseparator (hier: das
Semikolon) als Satzzeichen verwendet wird. Damit dieses nicht als
Feldseparator angesehen wird, fasst man das Feld üblicherweise in
Textbegrenzer ein.

Beispiel:

Code: Alles auswählen

Artikelnummer0815;"Artikelbezeichnung;BlaBla";Artikelpreis
Man sieht: Obige Zeile hat 3 (!) Felder, weil das Semikolon als
Satzzeichen der Artikelbezeichnung zugehörig ist. Dafür sorgen die
Hochkommata am Anfang und Ende des Feldes.
Noch eine kurze Anmerkung hierzu: Es kann natürlich auch vorkommen, dass in Feldern auch mal Hochkommata enthalten sind. Diese werden dann normalerweise verdoppelt dargestellt. Wenn das BlaBla aus obigem Beispiel also in Hochkommata stehen sollte müsste das so aussehen:

Code: Alles auswählen

Artikelnummer0815;"Artikelbezeichnung;""BlaBla""";Artikelpreis
Eine saubere Zeile muss also immer eine gerade Anzahl an Hochkommata haben.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Antworten