Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Preislisten umwandeln

Frage Entwicklung

Mitglied: illy79

illy79 (Level 1) - Jetzt verbinden

17.12.2007, aktualisiert 18.10.2012, 6996 Aufrufe, 25 Kommentare

Hallo Leute,
Bin neu hier habe ein größeres Problem beim Umwandeln einer Preisliste damit sie in unser Rechnungsprogramm importiert werden kann. Bin durch ne Suche auf euch gestoßen und hoffe Ihr könnt mir ein paar Tipps geben um mein Problem in Zukunft einfacher zu lösen.

Die Datensätze sehen in etwas so aus:

0001902138 Bezeichnung-italiensich BEZ-eng Bez-Deutsch EK-Preis


Daraus weden sollte:

"1902138";"BEZ-Ita";"BEZ-ENG";"BEZ-DEU";"EK-PREIS";"EK+20%Aufschlag"


Die Formatierung der originalen Preisliste ist nur über eine feste Breite. Momentan löse ich das Problem indem ich die Dateien 4-teile (wegen der größe) und dann in excel importiere, exportiere und wieder zusammenfügen.

Dies muss ich mehr oder weniger bei 4 anderen Lieferanten wiederholen und ist schon etwas lästig.

Kann mir irgendjemand einen Rat geben?

Greetz illy
Mitglied: Biber
17.12.2007 um 13:59 Uhr
Moin illy,

willkommen im Forum.

Lass uns mal klein anfangen, ein paar Infos fehlen ja noch...
Die Formatierung der originalen Preisliste ist nur über eine feste Breite.
Jaaaa... das bedeutet genauer gesagt:
  • die Preislisten bekommst Du als Text-Dateien mit fester Zeilenlänge?
  • ohne Trennzeichen zwischen den Feldern?
  • aber bei jedem Feld hast Du die Information geht "VonByte"..."BisByte"?
  • die Textdateien sind alle in der gleichen Codepage erstellt bzw. es gibt/es gibt nicht Sonderzeichen/Umlaute?
  • die Dateinamen folgen einer bestimmten Konvention oder sind jeweils im selben "Import"-Verzeichnis bei Beginn der Aktion oder werden die einzeln ausgewählt je nach Stimmungslage?
  • und sollen hinterher verschoben oder umbenannt oder gelöscht werden?
  • Import/Datenübernahme ist immer per Knopfdruck oder wenn genau 4 Lieferantendateien vorhanden sind oder immer am 3. des Monats?
  • die neu erzeugte(n) Excel-Tabellen(n) überschreiben die alten oder aktualisieren diese oder sind immer Monatsweise neu?
  • dein Ziel ist eine Automatisierung aus Excel heraus (z.B. eine Excel-Funktion "Datenübernahme" oder eher ein externes Quelldateien-Aufbereitungstool als Batch/VBSkript?
  • der richtige Bereich dafür ist dann, wenn "OffTopic" nicht mehr so richtig passt, dann am ehesten...?
  • Dein Rechner/Betriebssystem ist ein Windows-98/2000/XP/Vi$ta? Office 98/2000/2007?

Grüße
Biber
Bitte warten ..
Mitglied: illy79
17.12.2007 um 14:51 Uhr
Hi,

willkommen im Forum.
Danke

* die Preislisten bekommst Du als
Text-Dateien mit fester Zeilenlänge?
Jepp.

* ohne Trennzeichen zwischen den Feldern?
Genau.

* aber bei jedem Feld hast Du die
Information geht
"VonByte"..."BisByte"?
hab ich. Und wenn nicht erkennt man es auch sofort

* die Textdateien sind alle in der gleichen
Codepage erstellt bzw. es gibt/es gibt nicht
Sonderzeichen/Umlaute?
Da bin ich nicht sicher was Du meinst. Was meinst mit Codepage? Die Preislisten sind alle anderst aufgebaut. aber dieses abändern sollte ja nicht das Problem sein, oder?

* die Dateinamen folgen einer bestimmten
Konvention oder sind jeweils im selben
"Import"-Verzeichnis bei Beginn der
Aktion oder werden die einzeln
ausgewählt je nach Stimmungslage?
Die Importdateien muss ich mir immer herunterladen und entpacken. Je nach Stimmung ges Lieferanten würde ich sagen.

* und sollen hinterher verschoben oder
umbenannt oder gelöscht werden?
  • Import/Datenübernahme ist immer per
Knopfdruck oder wenn genau 4
Lieferantendateien vorhanden sind oder immer
am 3. des Monats?
Per Knopfdruck, mehr oder weniger. Bei manchen nicht an einem bestimmten Tag sondern wie sie fertig sind.

* die neu erzeugte(n) Excel-Tabellen(n)
überschreiben die alten oder
aktualisieren diese oder sind immer
Monatsweise neu?
Ist mir nicht so wichtig. Die Preislisten sind eigentlich immer neu, aber unser Rechnungsprogramm erkennt ja die Änderungen.

* dein Ziel ist eine Automatisierung aus
Excel heraus (z.B. eine Excel-Funktion
"Datenübernahme" oder eher ein
externes Quelldateien-Aufbereitungstool als
Batch/VBSkript?
ein externes Aufbereitungstool wäre klasse. Aber eine Datenübernahme per Excel in eine MySQL Datenbank wäre natürlich noch besser. Suchte aber eigenlicht nur nach einen Weg dies ohne immer über soviel Zusatzarbeit erledigen zu können.

* der richtige Bereich dafür ist dann,
wenn "OffTopic" nicht mehr so
richtig passt, dann am ehesten...?
Sorry, wenns im falschen Bereich ist, wußte nicht so richtig wohin damit und hatte wohl auch nicht alle Bereiche gesehn

* Dein Rechner/Betriebssystem ist ein
Windows-98/2000/XP/Vi$ta? Office
98/2000/2007?
Win XP, Office XP

Greetz illy
Bitte warten ..
Mitglied: Biber
17.12.2007 um 15:37 Uhr
Moin illy,

an ein paar Stellen sehe ich jetzt klarer,an einigen anderen hast Du mich nun doch eher verwirrt.

  • Umlaute/Codepages: Ich meinte damit, ob z.B in der "BEZ-DEU", also soweit ich diese Slang-Ausdrücke deuten kann, der "Artikelbezeichnung (deutsch)", ob da auch Umläute enthalten sind/sein dürfen und wenn ja, ob wir uns auf ein ASCII-"ü" oder ein ANSI-ü /DOS oder Windows oder whatever-Zeichensatz einstellen müssen.
  • Manuelle und spontane Konvertierung auf Knopfdruck bei Bedarf... okay, dann skripten wir.
  • Wenn ich es richtig sehe - das hatte ich vorher nicht so verstanden- ist Excel in dem Prozess gar nicht erforderlich? Die Ziel-Tabellen sollen in myAQL verwaltet werden?
  • und den Satz hier habe ich gar nicht verstanden: "Die Preislisten sind alle anderst aufgebaut. aber dieses abändern sollte ja nicht das Problem sein, oder?" Ähhmm... jeder Lieferant liefert ein eigenes Format... ? Ist ja auch okay... aber ist das Format je Lieferant wenigstens konstant von Monat zu Monat? Sonst solltet ihr lieber schnell auf XML-Format umsteigen...
  • Und die ZIEL-Tabellenstruktur auf mySQL(Feldtypen/Längen) muss bekannt sein.

  • Nett wäre es, wenn Du mal 5 oder 6 Beispielzeilen einer heutigen Textdatei in den Beitrag stellst. Natürlich mit ArtNr "000123456" und nicht mit echten Preisen... aber vom Format erkennbar.

Grüße
Biber
Bitte warten ..
Mitglied: illy79
17.12.2007 um 18:38 Uhr
Hi,


* Umlaute/Codepages: Ich meinte damit, ob
z.B in der "BEZ-DEU", also soweit
ich diese Slang-Ausdrücke deuten kann,
der "Artikelbezeichnung (deutsch)",
ob da auch Umläute enthalten sind/sein
dürfen und wenn ja, ob wir uns
auf ein ASCII-"ü" oder ein
ANSI-ü /DOS oder Windows oder
whatever-Zeichensatz einstellen müssen.
Aha, also von einem Lieferanten sind sie ohne Umlaute und vom anderen mit. Ja den Slang verstehste richtig.


* Wenn ich es richtig sehe - das hatte ich
vorher nicht so verstanden- ist Excel in dem
Prozess gar nicht erforderlich? Die
Ziel-Tabellen sollen in myAQL verwaltet
werden?
Ja Excel ist nicht nötig. Excel hatte ich genutzt um das gewollte Format bis jetzt zu erhalten. Ist aber natürlich sehr zeitaufwendig, wie gesagt, teilen, excel einlesen, aufschlag, zusammenfügen importieren.
Super wäre es natürlich direkt einen Import in die MySQL Datenbank per Script, aber dies ist wohl zu aufwändig, denke ich.

* und den Satz hier habe ich gar nicht
verstanden: "Die Preislisten
sind alle anderst aufgebaut. aber dieses
abändern sollte ja nicht das Problem
sein, oder?"
Ähhmm...
jeder Lieferant liefert ein eigenes Format...
? Ist ja auch okay... aber ist das Format je
Lieferant wenigstens konstant von Monat zu
Monat? Sonst solltet ihr lieber schnell auf
XML-Format umsteigen...
Ja die Formate sind bis jetzt zumidest gleich und denke das werden sie vorläufig auch bleiben.

* Und die ZIEL-Tabellenstruktur auf
mySQL(Feldtypen/Längen) muss bekannt
sein.
?? Da hab ich jetz keine Ahnung was Du damit meinst. Unser Rechnungsprogramm importiert ja die Daten sobald im richtigen CSV Format.

* Nett wäre es, wenn Du mal 5 oder 6
Beispielzeilen einer heutigen Textdatei in
den Beitrag stellst. Natürlich mit ArtNr
"000123456" und nicht mit echten
Preisen... aber vom Format erkennbar.
Ja klar mach ich.

Lieferant 1:
01.
0000001908112ELEMENTO FILTRO ARIA                              CART.FILTRE AIRE                                  AIR FILTER CARTRIDGE                    @@@@@@@@@@PATRONE-LUFTFFILTERPATRONE                        000000019,20 9AC450000500AF             0001 
02.
0000001908113GUARNI###E PIANA PER CAMBIO                      JOINT BOITE VITESS                                FLAT TRANSMISSION GASKET                          DICHTUNG-FLACHDICHTUNG GETRIEBE                   000000013,19 7BD200000039CF             0001 
03.
0000001908114GUARNI###E                                       JOINT                                             GASKET                                            DICHTUNG-DICHTUNG                                 000000004,06 5BB990000008C              0001 
04.
0000001908117SUPPORTO                                          SUPPORT/APPUI                                     SUPPORT                                           STUETZE-STUETZE                                   000000015,32 5MC990000550C              0001 
05.
0000001908121SERIE TENDINE                          (ACCESSORI)JEU DE RIDEAU ACC.                                CURTAINS SET                           (ACCESSORY)SATZ-VORHANGSATZ                        (ZUBEHOER)000000156,16 2YB060001920X              0001
01.
1-13       Teilenummer 
02.
14-63     Benennung italienisch 
03.
64-113   Benennung französisch 
04.
114-213 Benennung deutsch 
05.
214-225 Bruttopreis 
06.
226-227 Rabattkennzeichen 
07.
228-231 CodCLA 
08.
232-238 Gewicht in Gramm 
09.
239        TDR 
10.
241-253 Ersatz-Artikelnummer 
11.
254-257 Mndestmenge
So sollte diese Zeilen aussehen damit sie verarbeitet werden können:
"1908112";"ELEMENTO FILTRO ARIA";"CART.FILTRE AIRE";"AIR FILTER CARTRIDGE @@@@@@@@@@";"PATRONE-LUFTFFILTERPATRONE";"19,20";"9";"AC45";"500";"A";"F";"1"
"1908113";"GUARNI###E PIANA PER CAMBIO";"JOINT BOITE VITESS";"FLAT TRANSMISSION GASKET";"DICHTUNG-FLACHDICHTUNG GETRIEBE";"13,19";"7";"BD20";"39";"C";"F";"1"

Dieses F bei Ersatz-Teilenummer bedeutet ersatzlos ausgelaufen. Die Stelle ist manchmal leer und manchmal wie ne normale Artikelnummer belegt.


Für Lieferant Nr.2 muss ich die Satzbeschreibung erst anfragen. War ich wohl etwas zu vorlaut.

Greetz illy
[Edit Biber] Auf <code> umformatiert. [/Edit]
Bitte warten ..
Mitglied: Biber
17.12.2007 um 20:04 Uhr
So illy,

damit wir mal einen Anfang haben, hier mal der billigste Ansatz: Batch.
Kann nach dreimaligem Lesen auch ohne jegliche Programmiervorkenntnisse gepflegt und gewartet werden werden.

Da ich heute etwas in Eile bin, werfe ich hier nur schnell eine Skizze und deren Output vor die Füße und lass Dich da alleine dran knabbern...
....also, nicht an den Füßen knabbern, sondern an diesen kryptischen Zeilen...

Stehe aber morgen gerne für Rückfragen bereit.

01.
::---------Snipp MiniBestellKonvert.bat ---- 
02.
@Echo off & setlocal 
03.
Set "ImportDateiHeute=E:\lief1dez07.txt" 
04.
 
05.
If not exist "%ImportdateiHeute%" ( 
06.
    echo "%ImportdateiHeute%" existiert nicht. Ich brech gleich ab hier...oder  ins Essen. 
07.
    goto :eof 
08.
09.
REM Später echo Teilenummer  Benennung (ital)            Benennung (franz.)              Bez. deutsch, .... 
10.
::: 
11.
for /f "delims=" %%i in (%ImportDateiHeute%) do @set "line=%%i" &  call :gibbetAusKommaJetrennt 
12.
goto :eof 
13.
 
14.
 
15.
:gibbetAusKommaJetrennt 
16.
REM Entweder so : echo  "%line:~ 0,13%"; "%line:~13,50%"; "%line:~63,50%"; "%line:~113,50%"; "%line:~163,50%";"%line:~213,10%" ) 
17.
REM Oder so: 
18.
Set "Teilenummer=%line:~  0, 13%"   && Rem POS  1- 13 Teilenummer 
19.
Set "Bez_ITA=%line:~ 13, 50%"       && Rem POS  14- 63 Benennung italienisch 
20.
Set "BEZ_FRZ=%line:~ 63, 50%"       && Rem POS  64-113 Benennung französisch 
21.
Set "Bez_ENG=%line:~113, 50%"       && Rem POS 114-163 Benennung englisch 
22.
Set "BEZ_DEU=%line:~163, 50%"       && Rem POS 164-213 Benennung deutsch 
23.
:: ########114-213 Benennung deutsch glaub ich nicht 
24.
Set "BR_PREIS=%line:~ 214, 10%"      && Rem POS 214-225 Bruttopreis 
25.
Set "RABATTKZ=%line:~ 226, 2%"      && Rem POS 226-227 Rabattkennzeichen 
26.
Set "CodCLA=%line:~ 227, 4%"        && Rem POS 228-231 CodCLA 
27.
Set "Gewicht=%line:~ 231, 7%"       && Rem POS 232-238 Gewicht in Gramm 
28.
Set "TDR=%line:~ 238, 2%"            && Rem POS 239 240 TDR 
29.
Set "ArtNrErsatz=%line:~ 240, 13%"   && Rem POS 241 253 Ersatz-Artikelnummer 
30.
Set "MENGE_MIN=%line:~ 253, 4%"     && Rem POS 254-257 Mndestmenge 
31.
Echo BEZ_FRZ [%BEZ_FRZ%] TeileNr [%Teilenummer%] 
32.
Echo BEZ_ITA [%BEZ_ITA%]  
33.
Echo BEZ_ENG [%BEZ_ENG%]  
34.
Echo BEZ_DEU [%BEZ_DEU%]  
35.
Echo TDR [%TDR%] Gewicht [%Gewicht%] 
36.
goto :eof
Output:
01.
>e:\minibestellkonvert 
02.
BEZ_FRZ [CART.FILTRE AIRE                                  ] TeileNr [0000001908112] 
03.
BEZ_ITA [ELEMENTO FILTRO ARIA                              ] 
04.
BEZ_ENG [AIR FILTER CARTRIDGE                    @@@@@@@@@@] 
05.
BEZ_DEU [PATRONE-LUFTFFILTERPATRONE                        ] 
06.
TDR [AF] Gewicht [0000500] 
07.
BEZ_FRZ [JOINT BOITE VITESS                                ] TeileNr [0000001908113] 
08.
BEZ_ITA [GUARNI###E PIANA PER CAMBIO                      ] 
09.
BEZ_ENG [FLAT TRANSMISSION GASKET                          ] 
10.
BEZ_DEU [DICHTUNG-FLACHDICHTUNG GETRIEBE                   ] 
11.
TDR [CF] Gewicht [0000039] 
12.
BEZ_FRZ [JOINT                                             ] TeileNr [0000001908114] 
13.
BEZ_ITA [GUARNI###E                                       ] 
14.
BEZ_ENG [GASKET                                            ] 
15.
BEZ_DEU [DICHTUNG-DICHTUNG                                 ] 
16.
TDR [C ] Gewicht [0000008] 
17.
BEZ_FRZ [SUPPORT/APPUI                                     ] TeileNr [0000001908117] 
18.
BEZ_ITA [SUPPORTO                                          ] 
19.
BEZ_ENG [SUPPORT                                           ] 
20.
BEZ_DEU [STUETZE-STUETZE                                   ] 
21.
TDR [C ] Gewicht [0000550] 
22.
BEZ_FRZ [JEU DE RIDEAU ACC.                                ] TeileNr [0000001908121] 
23.
BEZ_ITA [SERIE TENDINE                          (ACCESSORI)] 
24.
BEZ_ENG [CURTAINS SET                           (ACCESSORY)] 
25.
BEZ_DEU [SATZ-VORHANGSATZ                        (ZUBEHOER)] 
26.
TDR [X ] Gewicht [0001920]
Also: es lässt sich mit Batch zerlegen und wie-auch-immer anders formatiert anzeigen.

Grüße
Biber
Bitte warten ..
Mitglied: illy79
18.12.2007 um 07:51 Uhr
Hi,

Wow das ging schnell. Danke. Werde mal probieren es abzuändern sobald ich Zeit habe.

Vielen Dank schonmal. Man sieht so einfach kanns sein.

Greetz illy
Bitte warten ..
Mitglied: illy79
18.12.2007 um 09:29 Uhr
HI,

also hab jetzt versucht das abzuändern, aber irgendwie hängt er sich auf.
01.
::---------Snipp MiniBestellKonvert.bat ---- 
02.
@Echo off & setlocal 
03.
Set "ImportDateiHeute=preis.txt" 
04.
 
05.
If not exist "%ImportdateiHeute%" ( 
06.
    echo "%ImportdateiHeute%" existiert nicht. Ich brech gleich ab hier...oder  ins Essen. 
07.
    goto :eof 
08.
09.
REM Später echo Teilenummer  Benennung (ital)            Benennung (franz.)              Bez. deutsch, .... 
10.
::: 
11.
for /f "delims=" %%i in (%ImportDateiHeute%) do @set "line=%%i" &  call :gibbetAusKommaJetrennt 
12.
goto :eof 
13.
 
14.
 
15.
:gibbetAusKommaJetrennt 
16.
REM Entweder so : echo  "%line:~ 0,13%"; "%line:~13,50%"; "%line:~63,50%"; "%line:~113,50%"; "%line:~163,50%";"%line:~213,10%" ) 
17.
REM Oder so: 
18.
Set "Teilenummer=%line:~  0, 13%"   && Rem POS  1- 13 Teilenummer 
19.
Set "Bez_ITA=%line:~ 13, 50%"       && Rem POS  14- 63 Benennung italienisch 
20.
Set "BEZ_FRZ=%line:~ 63, 50%"       && Rem POS  64-113 Benennung französisch 
21.
Set "Bez_ENG=%line:~113, 50%"       && Rem POS 114-163 Benennung englisch 
22.
Set "BEZ_DEU=%line:~163, 50%"       && Rem POS 164-213 Benennung deutsch 
23.
:: ########114-213 Benennung deutsch glaub ich nicht 
24.
Set "BR_PREIS=%line:~ 214, 10%"      && Rem POS 214-225 Bruttopreis 
25.
Set "RABATTKZ=%line:~ 226, 2%"      && Rem POS 226-227 Rabattkennzeichen 
26.
Set "CodCLA=%line:~ 227, 4%"        && Rem POS 228-231 CodCLA 
27.
Set "Gewicht=%line:~ 231, 7%"       && Rem POS 232-238 Gewicht in Gramm 
28.
Set "TDR=%line:~ 238, 2%"            && Rem POS 239 240 TDR 
29.
Set "ArtNrErsatz=%line:~ 240, 13%"   && Rem POS 241 253 Ersatz-Artikelnummer 
30.
Set "MENGE_MIN=%line:~ 253, 4%"     && Rem POS 254-257 Mndestmenge 
31.
 
32.
 
33.
Echo "%Teilenummer%";"%BEZ_ITA%";"%BEZ_FRZ%";"%BEZ_ENG%";"%BEZ_DEU%";"%BR_PREIS%";"%RABATTKZ%";"%CodCLA%";"%Gewicht%";"%TDR%";"%ArtNrErsatz%";"%MENGE_MIN%" >preis.csv 
34.
REM Echo BEZ_FRZ [%BEZ_FRZ%] TeileNr [%Teilenummer%] 
35.
REM Echo BEZ_ITA [%BEZ_ITA%]  
36.
REM Echo BEZ_ENG [%BEZ_ENG%]  
37.
REM Echo BEZ_DEU [%BEZ_DEU%]  
38.
REM Echo TDR [%TDR%] Gewicht [%Gewicht%] 
39.
goto :eof
Sobald ich mit >preis.csv versuche das in eine Datei umzuleiten gehts ewig. Vielleicht liegts auch an der Größe von 30 MB?

Hätte da eh noch 4 Fragen:
1. Hast Du evtl. die Sprungmarke eof vergessesn?
2. Kann man bei der Teilenummer die führenden Nullen irgendwie entfernen?
3. Kann man bei den Teilebezeichungen die Leerstellen entfernen?
4. Ist es möglich eine VK-Formel auf den Bruttopreis anzuwenden? So kleiner 5€ 40%, kleiner 50€ 30% kleiner 50 20%?

Greetz illy
Bitte warten ..
Mitglied: Biber
18.12.2007 um 09:54 Uhr
Moin illy,

mal sehen, ob wir der Sache näher kommen.
Im Moment ist es ja nur eine "Gucken, ob's so geht"-Skizze (neudeutsch: Proof-of-Concept).

An Geschwindigkeit (wenn das ein Kriterieum sein sollte) können wir noch viel basteln oder auch mit der gleichen Strategie auf ein schnelleres Werkzeug wechseln (z.B. VBSkript).

Einen Fehler hast Du drin, nämlich die Umleitung.
Dort schreibst Du jetzt mit ">preis.csv" immer einer neue Datei "preis.csv".
Wenn Du jeweils die neue Zeile anhängen willst, musst Du ">>preis.csv" schreiben.
Und irgendwo ganz am Anfang "if exist preis.csv del preis.csv", damit Du nicht die Datei vom letzten Import weiter aufblähst.

Hätte da eh noch 4 Fragen:
1. Hast Du evtl. die Sprungmarke eof vergessesn?
Nein. Das "goto :eof" ist eine Standardfloskel, die die CMD.exe versteht auch ohne Sprungmarke. Bedeutet soviel wie "RETURN" (zum Aufrufer oder zum Betriebssystem
2. Kann man bei der Teilenummer die führenden Nullen irgendwie entfernen?
Ja. Aber das ist im Batch auch nicht soooooo schnell wie mit VBSkript o.ä.
Lass uns da erstmal die Wichtigkeit der Verarbeitungsgeschwindigkeit klären vorher.
3. Kann man bei den Teilebezeichungen die Leerstellen entfernen?
Ja. Siehe 2.
4. Ist es möglich eine VK-Formel auf den Bruttopreis anzuwenden? So kleiner 5€ 40%, kleiner 50€ 30% kleiner 50 20%?
Auch ja, und auch das kostet Zeit.

Bitte vorrangig erstmal klären, ob wir bei diesem Bord-Werkzeug "Batch" bleiben, oder ob z.B. VBS eine (erlaubte) Alternative wäre.

Abzuwägen sind, was die in Deiner Situation relevanten Kriterien sind.
Bei Batch, was sicherlich 20x langsamer ist als VBS, ist das Charmante, dass es überall einsetzbar und von Nicht-Programmierern anpassbar ist.
Du kannst es ändern, pflegen, warten. Weil es ja auch nun einen noch kleineren Wortschatz hat als Hansi Hinterseer. Und letzten Endes nur eine Handvoll Zeilen sind.

Und wenn es läuft, läuft es eben auch unbeaufsichtigt und im Hintergrund - dann sollte es zweitrangig sein, ob es 30 Sekunden oder 30 Minuten braucht.

Aber klären musst Du es erstmal für Dich.

Grüße
Biber

P.S. Und erzeuge Dir bitte mal eine 100-Zeilen-Testdatei "Preis100.txt" aus der Original "Preis.txt", bis wir etwas Stabiles er-testet haben.
Bitte warten ..
Mitglied: 57100
18.12.2007 um 10:27 Uhr
Da ich irgendwie auch Mysql gehört habe passt ja eigentlich im idealfall PHP dazu:

01.
<? 
02.
$str = "0000001908112ELEMENTO FILTRO ARIA                              CART.FILTRE AIRE                                  AIR FILTER CARTRIDGE                    @@@@@@@@@@PATRONE-LUFTFFILTERPATRONE                        000000019,20 9AC450000500AF             0001 
03.
0000001908113GUARNI###E PIANA PER CAMBIO                      JOINT BOITE VITESS                                FLAT TRANSMISSION GASKET                          DICHTUNG-FLACHDICHTUNG GETRIEBE                   000000013,19 7BD200000039CF             0001 
04.
0000001908114GUAR/IZ.IO-E                                      JOINT                                             GASKET                                            DICHTUNG-DICHTUNG                                 000000004,06 5BB990000008C              0001 
05.
0000001908117SUPPORTO                                          SUPPORT/APPUI                                     SUPPORT                                           STUETZE-STUETZE                                   000000015,32 5MC990000550C              0001 
06.
0000001908121SERIE TENDINE                          (ACCESSORI)JEU DE RIDEAU ACC.                                CURTAINS SET                           (ACCESSORY)SATZ-VORHANGSATZ                        (ZUBEHOER)000000156,16 2YB060001920X              0001"; 
07.
 
08.
$arraystring=explode("\n",$str); 
09.
echo $str; 
10.
foreach($arraystring as $v){ 
11.
	if(eregi("([0-9]{13})([-/\.@\(\)[:alpha:] ]{50})([-/\.@\(\)[:alpha:] ]{50})([-/\.@\(\)[:alpha:] ]{50})([-/\.@\(\)[:alpha:] ]{50})([0-9,]{12}) ([0-9]{1})([A-Z0-9]{4})([0-9]{7})([A-Z]{1})([A-Z ]{1}).*([0-9]+)",$v,$regs)){ 
12.
		/* 
13.
			[1] => 0000001908112 
14.
		    [2] => ELEMENTO FILTRO ARIA                               
15.
		    [3] => CART.FILTRE AIRE                                   
16.
		    [4] => AIR FILTER CARTRIDGE                    @@@@@@@@@@ 
17.
		    [5] => PATRONE-LUFTFFILTERPATRONE                         
18.
		    [6] => 000000019,20 
19.
		    [7] => 9 
20.
		    [8] => AC45 
21.
		    [9] => 0000500 
22.
		    [10] => A 
23.
		    [11] => F 
24.
		    [12] => 1 
25.
		*/ 
26.
		print_r($regs); 
27.
28.
29.
?>
Bitte warten ..
Mitglied: illy79
18.12.2007 um 11:11 Uhr
Hi,

mal sehen, ob wir der Sache näher
kommen.
Da bin ich mir sogar sicher...

Einen Fehler hast Du drin, nämlich die
Umleitung.
Dort schreibst Du jetzt mit
">preis.csv" immer einer neue
Datei "preis.csv".
Wenn Du jeweils die neue Zeile anhängen
willst, musst Du
">>preis.csv" schreiben.
Und irgendwo ganz am Anfang "if exist
preis.csv del preis.csv", damit Du nicht
die Datei vom letzten Import weiter
aufblähst.
Na jetzt wird mir auch klar warum die Datei so klein, hätt ich auch selber drauf kommen können...

> 2. Kann man bei der Teilenummer die
führenden Nullen irgendwie entfernen?
Ja. Aber das ist im Batch auch nicht soooooo
schnell wie mit VBSkript o.ä.
Lass uns da erstmal die Wichtigkeit der
Verarbeitungsgeschwindigkeit klären
vorher.
> 3. Kann man bei den Teilebezeichungen
die Leerstellen entfernen?
Ja. Siehe 2.
> 4. Ist es möglich eine VK-Formel
auf den Bruttopreis anzuwenden? So kleiner
5€ 40%, kleiner 50€ 30% kleiner 50
20%?
Auch ja, und auch das kostet Zeit.

Bitte vorrangig erstmal klären, ob wir
bei diesem Bord-Werkzeug "Batch"
bleiben, oder ob z.B. VBS eine (erlaubte)
Alternative wäre.

Abzuwägen sind, was die in Deiner
Situation relevanten Kriterien sind.
Bei Batch, was sicherlich 20x langsamer ist
als VBS, ist das Charmante, dass es
überall einsetzbar und von
Nicht-Programmierern anpassbar ist.
Du kannst es ändern, pflegen, warten.
Weil es ja auch nun einen noch kleineren
Wortschatz hat als Hansi Hinterseer. Und
letzten Endes nur eine Handvoll Zeilen sind.

Und wenn es läuft, läuft es eben
auch unbeaufsichtigt und im Hintergrund -
dann sollte es zweitrangig sein, ob es 30
Sekunden oder 30 Minuten braucht.

Aber klären musst Du es erstmal
für Dich.
Performance ist gut, aber eher unwichtig. Wichtiger ist mir das ich es abändern kann. Außerdem möcht ich Dir natürlich auch nicht zuviel aufwand machen.

Greetz
Bitte warten ..
Mitglied: illy79
18.12.2007 um 11:17 Uhr
Hi,

MySQL hast Du richtig gehört, aber MySQL ist nur die Datenbank unseres Rechnungsprogrammes. Zu importieren der Preislisten muss ich diese aber erst in ein passendes csv Format umwandeln.

Noch besser wäre der direkt Import in diese Datenbank, aber das wird wohl zu aufwändig werden denke ich.

Was macht dein Script, eigentlich? Sorry bei dem DOS Script kann ich weitgehend folgen, aber bei MySQL oder PHP-Befehlen komm ich nicht nicht mehr mit...

Greetz illy
Bitte warten ..
Mitglied: pacobay
18.12.2007 um 21:24 Uhr
Hallo illy, hallo Biber

@Biber
Das Script ist als Entlastung für Dich gedacht und als nicht als Konkurenz

Und natürlich als die möglicherweise schnellere Alternative für illy.
Wobei durch die gewünschten Konvertierungen das Teil wohl etwas ausgebremst wird.
Aber dass wäre als batch ja auch so.


@illy&Biber
Habe das Script so geschrieben,
dass ein Nicht-VBSler das Ding in den Grundzügen verstehen kann
Und wahrscheinlich auch anpassen&warten kann
Hoffe ich zumindest!


Alle weiteren Info's im Script

@illy
Egal wie Gut das Ding läuft.

Normalerweise sollte man das Teil noch um diverse Prüfungen ergänzen.
z.B. Vorkommen des gewünschten Trennzeichens im Input.

Ich würde immer noch mal ein Auge auf den Output werfen.
Insbeondere auf die letzten Zeilen.

Innerhalb eurer DB würde ich ein Inputtable schaffen,
aus dem erst NACH der Überprüfung des Imports
die Daten in die eigentlichen Tables geschrieben werden.

Insbesondere da ich mich irgendwie des Eindruckes nicht verwehren kann,
dass dieser Lieferant gerade kein ein DB-Crack ist.

Backup der DB vor solchem Massenimport wäre auch keine so schlechte Idee.

Im Script sind noch ein paar Fragen offen bzgl. Deines Verkaufspreises

Habe ihn zur Zeit einfach gleich Ek gesetzt und am ende der Datensätze hinzugefügt
Also erst anpassen

Solltest Du noch Fragen haben einfach melden


ciao pacobay



01.
' VB Script Document 
02.
'Erstellt als helptesk 4 Thread 
03.
'http://www.administrator.de/Preislisten_umwandeln.html 
04.
'18.12.2007 19:44:39 
05.
'pacobay 
06.
'testet on XPP / WSH 5.7 für XP 
07.
 
08.
'target 
09.
'	Umwandlung von Daten aus einer txtdatei (mit feste Feldgroesse) 
10.
'   in eine txtdatei von Datensätze mit Trennzeichen 
11.
'   diverse Feldumwandlungen Trim etc 
12.
'   Code soll möglichst für Nicht- VBSler zu warten sein 
13.
'   Nicht- VBSler müssen lediglich die Konstanten (Const) anpassen 
14.
'   Die Aufteilung der Datensätze in Parts soll es ihm ermöglichen 
15.
'   die Anzahl der Parts beliebig zu verändern 
16.
'	via del or copy&paste+laufende Nr anpassen UND OUTPUTSTRING (OutDS) 
17.
'   unter Umständen Bereich Headline scharfmachen 
18.
'   Datenkonvertierungen sind ggf. löschenbar 
19.
'********************************************************************* 
20.
21.
Option Explicit 
22.
23.
'Deklaration der Objekte 
24.
Dim WshShell 
25.
Set WshShell = Wscript.CreateObject("Wscript.Shell") 
26.
'--------------------------- 
27.
Dim FSO, FileIn, FileOut 
28.
Set FSO = CreateObject("Scripting.FileSystemObject") 
29.
'--------------------------- 
30.
31.
'Ein paar Variablen für meine Art der Popup Messages 
32.
33.
DIM strTITELs		   ' Meldungstitel im Script festgelegt    [InBox & PopUp] 
34.
DIM strMSGs            ' Meldungstexte für Messages                    [PopUp] 
35.
DIM numShowTimeS       ' im Script festgelegte Anzeigezeit in sec      [PopUp] 
36.
DIM numBtnCodeR        ' ReturnCode Wert des geklickten Buttons        [PopUp] 
37.
38.
'--------------------------- 
39.
40.
' Diesen Abschnitt(Pfad&Dateiname)ensprechend anpassen 
41.
42.
Const Input        = "C:\just4Test\InputSupp01.txt" 
43.
Const Output       = "C:\just4Test\OutputSupp01.txt" 
44.
45.
'--------------------------- 
46.
' Das Trennzeichen in dem Output definieren ggf. anpassen 
47.
48.
Const TZ =";"                       'Trennzeichen 
49.
'--------------------------- 
50.
Dim AZDs                            'Anzahl der verarbeiteten Datensätze 
51.
'--------------------------- 
52.
53.
Dim InDS							'InputDatensatz 
54.
Dim OutDS							'OutputDatensatz 
55.
'--------------------------- 
56.
57.
' Aus Deinem Posting geht hervor: 
58.
  ' 1-13    Teilenummer 
59.
  ' 14-63   Bezeichnung italienisch 
60.
  ' 64-113  Bezeichnung französisch 
61.
  ' 114-213 Bezeichnung deutsch 
62.
  ' 214-225 Bruttopreis 
63.
  ' 226-227 Rabattkennzeichen 
64.
  ' 228-231 CodCLA 
65.
  ' 232-238 Gewicht in Gramm 
66.
  ' 239-240 TDR 
67.
  ' 241-253 Ersatz-Artikelnummer 
68.
  ' 254-257 Mindestmenge 
69.
70.
'--------------------------- 
71.
72.
73.
74.
DIM   Part01 
75.
Const P01Bez        = "Teilenummer"                 'vgl Exkurs Headline 
76.
Const Part01Start   = 1 
77.
Const Part01Ende    = 13 
78.
79.
DIM   Part02 
80.
Const P02Bez        = "Bezeichnung italienisch" 
81.
Const Part02Start   = 14 
82.
Const Part02Ende    = 63 
83.
84.
DIM   Part03 
85.
Const P03Bez        = "Bezeichnung französisch" 
86.
Const Part03Start   = 64 
87.
Const Part03Ende    = 113 
88.
89.
DIM   Part04 
90.
Const P04Bez        = "Bezeichnung deutsch" 
91.
Const Part04Start   = 114 
92.
Const Part04Ende    = 213 
93.
94.
DIM   Part05 
95.
Const P05Bez        = "Bruttopreis" 
96.
Const Part05Start   = 214 
97.
Const Part05Ende    = 225 
98.
99.
DIM   Part06 
100.
Const P06Bez        = "Rabattkennzeichen" 
101.
Const Part06Start   = 226 
102.
Const Part06Ende    = 227 
103.
104.
DIM   Part07 
105.
Const P07Bez        = "CodCLA" 
106.
Const Part07Start   = 228 
107.
Const Part07Ende    = 231 
108.
109.
DIM   Part08 
110.
Const P08Bez        = "Gewicht in Gramm" 
111.
Const Part08Start   = 232 
112.
Const Part08Ende    = 238 
113.
114.
DIM   Part09 
115.
Const P09Bez        = "TDR" 
116.
Const Part09Start   = 239 
117.
Const Part09Ende    = 240 
118.
119.
DIM   Part10 
120.
Const P10Bez        = "Ersatz-Artikelnummer" 
121.
Const Part10Start   = 241 
122.
Const Part10Ende    = 253 
123.
124.
DIM   Part11 
125.
Const P11Bez        = "Mindestmenge" 
126.
Const Part11Start   = 254 
127.
Const Part11Ende    = 257 
128.
129.
130.
'Davon ausgehend, dass Lieferant Nettobreise in Euro liefert 
131.
' benötigen man u.U. zur Berechnung des Bruttoverkaufspreises noch 
132.
133.
Const MwStSatz=19             	'der Mehrwertsteuersatz 
134.
DIM bVKP							'BruttoVK 
135.
136.
'Diese Berechnung ist bedingt durch fehlende Infos noch nicht ausgeführt 
137.
138.
'********************************************************************* 
139.
'Ende der Deklaration 
140.
'********************************************************************* 
141.
142.
143.
'Einige Hilfsprozeduren 
144.
145.
'Für Funktion Ersetze 
146.
dim SuchString, Suchmuster, ErsatzMuster 
147.
 
148.
' Aufrufbeispiel: 
149.
'  SuchString=  "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern." 
150.
'  Suchmuster="Taxi" 
151.
'  ErsatzMuster="Auto" 
152.
'  WScript.echo Ersetze(SuchString,Suchmuster, ErsatzMuster) 
153.
154.
155.
Function Ersetze(SuchString,Suchmuster, ErsatzMuster) 
156.
157.
  Dim regAusdr			               ' Variablen erstellen. 
158.
  Set regAusdr = New RegExp            ' Erstellt einen regulären Ausdruck. 
159.
  regAusdr.Pattern = Suchmuster        ' Legt das Suchmuster fest. 
160.
  regAusdr.IgnoreCase = True           ' Ignoriert die Groß-/Kleinschreibung. 
161.
  regAusdr.Global = True               ' Legt globales Anwenden fest. 
162.
163.
  ' Führe nun die Ersetzung durch und weise es als Funktionswert zu. 
164.
  	  Ersetze=regAusdr.Replace(SuchString,ErsatzMuster) 
165.
End Function 
166.
167.
'------------------------------------------------------------------- 
168.
169.
SUB CheckInFile 
170.
' Püfen ob Inputdatei gefunden werden kann 
171.
' if yes then öffnen als Vorbereitung zur weiteren Verarbeitung 
172.
' If not Info & Abbruch 
173.
174.
If fso.FileExists(Input) then 
175.
   Set FileIn  = FSO.OpenTextFile( Input, 1, true) 
176.
else 
177.
178.
numShowTimeS   = 0 
179.
strTITELs	   ="Input-Fehler" 
180.
strMSGs       =+_ 
181.
"Folgende Datei konnte nicht gefunden werden!" &chr(13)&chr(13)&+_ 
182.
Input &chr(13)&chr(13)&+_ 
183.
"Das Script wird abgebrochen"&chr(13)&chr(13)&chr(9)&"Pls check:"&chr(9)&chr(9)&"Inputfile-Konstante (in the script)"&chr(13)&chr(9)&"or:" &chr(9)&chr(9)&"The Input-File himself" 
184.
185.
WshShell.popup strMSGs,numShowTimeS,strTITELs,16+4096 
186.
187.
Wscript.Quit 
188.
end if 
189.
190.
END SUB 'CheckInFile 
191.
192.
'------------------------------------------------------------------- 
193.
194.
SUB CheckOutFile 
195.
196.
' Prüfen ob Outputdatei bereits vorhanden ist 
197.
' if not weiter mit öffnen der Datei als Vorbereitung zur weiteren Verarbeitung 
198.
199.
' if there then: Abfrage ob diese gelöscht werden kann Optionen: Ok oder Abbruch 
200.
	 'Option: OK 
201.
	 	 ' dann halt löschen und weiter mit 
202.
	 	 ' öffnen der Datei als Vorbereitung zur weiteren Verarbeitung 
203.
204.
	 'Option: Abbrechen 
205.
	 		 'Abbruch 
206.
207.
208.
If fso.FileExists(Output) then 
209.
numShowTimeS   = 0 
210.
strTITELs	   ="Check 4 OutputFile" 
211.
strMSGs       =+_ 
212.
"Die vorgesehene Output Datei ist bereitsvorhanden!" &chr(13)&chr(13)&+_ 
213.
Output &chr(13)&chr(13)&+_ 
214.
"Kann die Datei gelöscht werden?"&chr(13)&chr(13)&chr(9)&"OK:"&chr(9)&chr(9)&"delete and go on"&chr(13)&chr(9)&"Abbrechen:" &chr(9)&"Scriptende" 
215.
216.
numBtnCodeR=WshShell.popup(strMSGs,numShowTimeS,strTITELs,1+32+4096) 
217.
218.
219.
'Auswertung des Geklickten 
220.
221.
SELECT CASE numBtnCodeR 
222.
         CASE  1  ' OK 
223.
		 	   fso.DeleteFile(Output) 
224.
			   	 Wscript.sleep 5000  'gibt dem Script etwas Zeit 
225.
		 	   Wscript.echo "file should be killed" 
226.
227.
         CASE  2  ' Abbrechen 
228.
         	   Wscript.echo "Abbruch durch Anwender" 
229.
         	   Wscript.Quit 
230.
      END SELECT 
231.
232.
else 
233.
' Na dann gehts einfach weiter 
234.
end if 
235.
236.
 ' öffnen der Datei als Vorbereitung zur weiteren Verarbeitung 
237.
238.
Set FileOut = fso.OpenTextFile( output,8,true) 
239.
240.
'--------------------------- 
241.
242.
'Exkurs 
243.
'Unter bestimmten Umständen kann eine Feldbezeichnungskopfzeile gewünscht werden 
244.
'Diese wird hier zwar erstellt aber nicht umgesetzt da im Thread nicht benötigt 
245.
'Einfach als Vorgriff für allgemeine Verwendbarkeit 
246.
' Daher zur Zeit auskommentiert 
247.
' Achtung als 12ter Wert ist noch der BruttoVerkaufspreis (bVKP) angefügt 
248.
 
249.
' DIM HEADLINE 
250.
' HEDLINE=P01Bez&TZ&P02Bez&TZ&P03Bez&TZ&P04Bez&TZ&P05Bez&TZ&P06Bez&TZ&P07Bez&TZ&P08Bez&TZ&P09Bez&TZ&P10Bez&TZ&P11Bez&TZ&"bVKP"&TZ 
251.
' FileOut.WriteLine(HEADLINE)          'schreibt OutDs in Outputfile 
252.
253.
254.
END SUB 'CheckInFile 
255.
'------------------------------------------------------------------- 
256.
'------------------------------------------------------------------- 
257.
'------------------------------------------------------------------- 
258.
'Der eigentliche ArbeitsSUB 
259.
'------------------------------------------------------------------- 
260.
 
261.
SUB DoTheWork 
262.
'Der InputFile (FileIn) wurde schon unter CheckInFile geöffnet 
263.
 
264.
' bis InputFile zu Ende ist, immer weiter machen 
265.
Do While Not (FileIn.atEndOfStream) 
266.
InDS = FileIn.Readline         ' eine Zeile lesen und als Datensatz DS verwenden 
267.
 
268.
'---------------------- 
269.
'NUN wir der jeweilige inDS in seine Bestandteile (parts01 bis 11) zerlegt 
270.
' Die Ergebnisse habe ich zumeist zusätzlich "getrimmt" 
271.
 
272.
' TRIM 
273.
' gibt eine Kopie einer Zeichenfolge zurück, die keine führenden Leerzeichen 
274.
' (LTrim), keine nachgestellten Leerzeichen (RTrim) oder weder führende noch 
275.
' nachgestellte Leerzeichen (Trim) enthält. 
276.
 
277.
 
278.
part01 = trim (right(Left(inDS,part01Ende),part01ENDE-part01Start+1)) 
279.
 
280.
'__________ 
281.
 
282.
' Part01 fertig aber gleich noch die gewünschte Veränderung des Inhaltes. 
283.
 
284.
'Kann man bei der Teilenummer die führenden Nullen irgendwie entfernen? 
285.
'Ja wie folgt: 
286.
Do until Left(part01,1)<>"0"  
287.
part01=right(part01,len(Part01)-1) 
288.
loop 
289.
 
290.
'__________ 
291.
'__________ 
292.
 
293.
'Weiter mit den nächsten Parts 
294.
 
295.
part02 = trim (right(Left(inDS,part02Ende),part02ENDE-part02Start+1)) 
296.
part03 = trim (right(Left(inDS,part03Ende),part03ENDE-part03Start+1)) 
297.
part04 = trim (right(Left(inDS,part04Ende),part04ENDE-part04Start+1)) 
298.
 
299.
'__________ 
300.
 
301.
' Wieder gleich noch die gewünschte Veränderung des Inhaltes. 
302.
 
303.
' Kann man bei den Teilebezeichungen die Leerstellen entfernen? 
304.
' schönen Gruß an den Hersteller seine Datenübergabe ist sch... 
305.
' Aber klagen hilft wohl nichts und daher Rückgriff auf die Funktion Ersetze 
306.
 
307.
  Suchmuster   = chr(32)&chr(32)  	' zwei Leerstellen 
308.
  ErsatzMuster = chr(32)			' eine Leerstellen 
309.
 
310.
 
311.
Dim i 
312.
i=0 
313.
Do until i=50 
314.
  part02= Ersetze(part02,Suchmuster, ErsatzMuster) 
315.
  part03= Ersetze(part03,Suchmuster, ErsatzMuster) 
316.
  part04= Ersetze(part04,Suchmuster, ErsatzMuster) 
317.
  i=i+1 
318.
loop 
319.
 
320.
'__________ 
321.
'__________ 
322.
 
323.
'Bruttopreis (Einkauf) 
324.
'Abweichend kein Trim sondern CCur-Funktion 
325.
'Gibt einen Ausdruck zurück, der in einen Wert vom Typ Variant 
326.
'mit Untertyp Currency konvertiert wurde. 
327.
 
328.
part05 = CCur (right(Left(inDS,part05Ende),part05ENDE-part05Start+1)) 
329.
 
330.
'__________ 
331.
 
332.
'Thema Verkaufspreis 
333.
 
334.
 ' Wscript.echo part05  'nur zu Testzwecken 
335.
'Deine Frage war: Ist es möglich eine VK-Formel auf den Bruttopreis anzuwenden? So kleiner 5€ 40%, kleiner 50€ 30% kleiner 50 20%? 
336.
 
337.
' Habe verstanden Du wolltest auch noch einen Verkaufspreis in Abhängigkeit des EKpreises berechnen 
338.
' zur Umsetzung Zusatzinformationen notwendig 
339.
' Einkauspreise wirklich brutto ungewöhlich but if so: enthaltender MwStsatz? 
340.
' Verkaufswert Brutto or netto or beides 
341.
' Formel für Verkaufspreisfestlegung 
342.
 
343.
 
344.
 'zur Zeit einfach 
345.
 
346.
bVKP = part05 
347.
 
348.
' Nur als Beispielsansatz wie mit diesen Infos weitergearbeitet würde 
349.
'Beispiele für allg. SELECT CASE 
350.
    'SELECT CASE bVKP 
351.
      ' ' ist BruttoVK = 5? 
352.
      '   CASE 5 
353.
	  	  	   'bVKP=part05 
354.
      ' ' ist bVKP zwischen 5 und 10? 
355.
      ' ' Die kleinere Zahl muss zuerst angegeben werden 
356.
      '   CASE 5 TO 10 
357.
      ' ' ist bVKP größer als 5? 
358.
      '   CASE IS > 5 
359.
      ' END SELECT 
360.
361.
'__________ 
362.
363.
364.
part06 = trim (right(Left(inDS,part06Ende),part06ENDE-part06Start+1)) 
365.
part07 = trim (right(Left(inDS,part07Ende),part07ENDE-part07Start+1)) 
366.
part08 = trim (right(Left(inDS,part08Ende),part08ENDE-part08Start+1)) 
367.
part09 = trim (right(Left(inDS,part09Ende),part09ENDE-part09Start+1)) 
368.
part10 = trim (right(Left(inDS,part10Ende),part10ENDE-part10Start+1)) 
369.
370.
371.
'__________ 
372.
373.
part11 = trim (right(Left(inDS,part11Ende),part11ENDE-part11Start+1)) 
374.
375.
'__________ 
376.
377.
'Die Mindestbestellmenge hat wie Teilenummer führenden Nullen 
378.
' also auch weg damit 
379.
Do until Left(part11,1)<>"0" 
380.
part11=right(part11,len(Part11)-1) 
381.
loop 
382.
'__________ 
383.
'__________ 
384.
385.
386.
' Nun erfolgt Die Zusammenstellung des Übergabestrings 
387.
388.
' Der Übergabesrting habbe ich in recht primitiver Form zusammengestellt 
389.
' Aber durch diese Art der Übergabe kannst Du auch als Nicht-Vbsler  
390.
' die Reihenfolge leicht anpassen. 
391.
' Je nachdem in welcher Reihenfolge Sie für den Import verwendet werden sollen 
392.
' Auf die Verbindung mit TZ dem Trennzeichen achten! 
393.
394.
' Achtung als 12ter Wert ist noch der BruttoVerkaufspreis angefügt 
395.
396.
OutDS=part01&TZ&part02&TZ&part03&TZ&part04&TZ&part05&TZ&part06&TZ&part07&TZ&part08&TZ&part09&TZ&part10&TZ&part11&TZ&bVKP&TZ 
397.
398.
'Und wegschreiben 
399.
FileOut.WriteLine(outDS)          'schreibt OutDs in Outputfile 
400.
401.
'_______________ 
402.
403.
'Noch die Anzahl um eins erhöhen rein zu Statistikzwecken 
404.
AzDs=AZDs+1 
405.
406.
'_______________ 
407.
408.
loop   ' und weiter zur und dann auf zur nächsten Input-Zeile 
409.
410.
411.
END SUB                 'DoTheWork 
412.
413.
'------------------------------------------------------------------- 
414.
'------------------------------------------------------------------- 
415.
416.
417.
' Noch ein kleiner HilfSUB Um das Ende anzuzeigen 
418.
419.
SUB Fertig 
420.
WScript.Echo "Ich habe fertig!" &Chr(13)&Chr(13)&+_ 
421.
"Anzahl der verarbeiteten Zeilen: "&AzDs 
422.
END SUB 'Fertig 
423.
424.
425.
'------------------------------------------------------------------- 
426.
427.
'Ein MainSUB um die einzelnen SUBs aufzurufen 
428.
429.
SUB MAIN 
430.
	CheckInFile 
431.
	CheckOutFile 
432.
	DoTheWork 
433.
	Fertig 
434.
END SUB 
435.
 
436.
437.
'------------------------------------------------------------------- 
438.
439.
'Der letzendliche Aufruf des ganzen Tralala 
440.
441.
MAIN 
442.
443.
'------------------------------------------------------------------- 
444.
445.
' EOF 
446.
 
447.
 

@illy habe Dir noch orginale Testumgebung als Zip gesendet
Die automatische Formatierung der Beiträge zerstört manchmal die Übersichtlichkeit

viel Erfolg

By the way ich verwende den Freeware Codeeditor PSPAD
macht das VBS-Leben leicher !
http://www.pspad.com/de/
Bitte warten ..
Mitglied: Biber
19.12.2007 um 11:41 Uhr
Moin alle,

na, das fängt ja richtig an Spaß zu machen...

Dann haben bald richtig viele gute Lösungsskizzen, die ja durchaus ihren eigenen Charme haben.

Wäre schade, wenn die Skizze von #intuz# unter den Tisch fällt, nur weil pacobays und meine viel länger und beeindruckender aussehen.

Eher der Vollständigkeit möchte ich auch noch die Batch-Variante ergänzen um zwei Rand-Funktionen, nämlich um die Entfernung der trailing blanks bei den "Teilebezeichnungen" und die Entfernung der leading blanks der Teilenummer.

01.
::---------Snipp MiniBestellKonvert.bat ---- 
02.
@Echo off & setlocal 
03.
Set "ImportDateiHeute=preise.txt" 
04.
 
05.
If not exist "%ImportdateiHeute%" ( 
06.
    echo "%ImportdateiHeute%" existiert nicht. Ich brech gleich ab hier...oder  ins Essen. 
07.
    goto :eof 
08.
09.
REM Später echo Teilenummer  Benennung (ital)            Benennung (franz.)              Bez. deutsch, .... 
10.
::: 
11.
for /f "delims=" %%i in (%ImportDateiHeute%) do @set "line=%%i" &  call :gibbetAusKommaJetrennt 
12.
goto :eof 
13.
 
14.
 
15.
:gibbetAusKommaJetrennt 
16.
REM Entweder so : echo  "%line:~ 0,13%"; "%line:~13,50%"; "%line:~63,50%"; "%line:~113,50%"; "%line:~163,50%";"%line:~213,10%" ) 
17.
REM Oder so: 
18.
Set "Teilenummer=%line:~  0, 13%"   && Rem POS  1- 13 Teilenummer 
19.
Set "Bez_ITA=%line:~ 13, 50%"       && Rem POS  14- 63 Benennung italienisch 
20.
Set "BEZ_FRZ=%line:~ 63, 50%"       && Rem POS  64-113 Benennung französisch 
21.
Set "Bez_ENG=%line:~113, 50%"       && Rem POS 114-163 Benennung englisch 
22.
Set "BEZ_DEU=%line:~163, 50%"       && Rem POS 164-213 Benennung deutsch 
23.
:: ########114-213 Benennung deutsch glaub ich nicht 
24.
Set "BR_PREIS=%line:~ 214, 10%"     && Rem POS 214-225 Bruttopreis 
25.
Set "RABATTKZ=%line:~ 226, 2%"      && Rem POS 226-227 Rabattkennzeichen 
26.
Set "CodCLA=%line:~ 227, 4%"        && Rem POS 228-231 CodCLA 
27.
Set "Gewicht=%line:~ 231, 7%"       && Rem POS 232-238 Gewicht in Gramm 
28.
Set "TDR=%line:~ 238, 2%"           && Rem POS 239 240 TDR 
29.
Set "ArtNrErsatz=%line:~ 240, 13%"  && Rem POS 241 253 Ersatz-Artikelnummer 
30.
Set "MENGE_MIN=%line:~ 253, 4%"     && Rem POS 254-257 Mndestmenge 
31.
:: Nebenrechnung I: die BEZ_xxx-Felder RTrimmen 
32.
For %%i in (BEZ_ITA BEZ_FRZ BEZ_ENG BEZ_DEU) do call :Char50ToVarChar %%i 
33.
::Nebenrechnung II - Führende Nullen der Teilenummer entfernen 
34.
call :CutLeadingZeros Teilenummer 
35.
:: Echo "%Teilenummer%";"%BEZ_ITA%";"%BEZ_FRZ%";"%BEZ_ENG%";"%BEZ_DEU%";"%BR_PREIS%";"%RABATTKZ%";"%CodCLA%";"%Gewicht%";"%TDR%";"%ArtNrErsatz%";"%MENGE_MIN%" >preis.csv 
36.
Echo BEZ_FRZ [%BEZ_FRZ%] TeileNr [%Teilenummer%] 
37.
Echo BEZ_ITA [%BEZ_ITA%]  
38.
Echo BEZ_ENG [%BEZ_ENG%]  
39.
Echo BEZ_DEU [%BEZ_DEU%]  
40.
Echo TDR [%TDR%] Gewicht [%Gewicht%] 
41.
goto :eof 
42.
 
43.
:Char50ToVarchar Parameter1ist der Name der Variablen z.B BEZ_FRZ 
44.
Setlocal enableDelayedExpansion 
45.
Set "Charvar=!%1!" & Set "len=" 
46.
for /L %%i in (1,1,50) do if "!Charvar:~-%%i,1!" NEQ " " if not defined len set /a len=51-%%i 
47.
if defined len Set "Charvar=!Charvar:~0,%len%!" 
48.
endlocal & set "%1=%Charvar%" 
49.
goto :eof 
50.
 
51.
:CutLeadingZeros 
52.
Setlocal enableDelayedExpansion 
53.
Set "Charvar=!%1!" & Set "Start=" 
54.
For /L %%i in (0,1,13) do if "!Charvar:~%%i,1!" NEQ "0" if not defined Start set /a start=%%i 
55.
if defined Start Set "Charvar=!Charvar:~%start%!" 
56.
endlocal & set "%1=%Charvar%" 
57.
goto :eof
Wenn etwas Schnelleres als Batch verwendet werden kann, würde ich natürlich das nehmen.

Grüße
Biber
Bitte warten ..
Mitglied: illy79
19.12.2007 um 22:45 Uhr
Hi,

@Biber
Deine Batch ist echt super, liefert klasse Ergebnisse, aber ein kleine Bitte hätte ich noch. Könntest Du mir bitte eine VK-Aufschlagsformel hinzufügen? kleiner 5€ 40%, kleiner 50€ 30% und größer 50€ 20%? Einfach auf den Bruttopreis. Ohne irgendwas mit MwSt abziehen(Diese Formel ist nur für die andere Preisliste gedacht, wenn sie da ist kann ich sie selber ändern und muss euch nicht nervern )

@pacobay
wie nutzte ich das Script? Datei als .vbs speichern und ausführen? Wenn ichs so mache ist die DOS Variante komischerweise viel schneller. Könntest Du mir bitte auch noch die VK-Formel hinzufügen. Außerdem habe ich bei deiner Version noch ein Problem. Die Formatierung ist nicht ganz korrekt. Sollte So aussehen:

"Art-Nr","Bez"...

Deine sieht so aus:

Art-Nr";"Bez"... - Das " an Anfang fehlt am Anfang und am Schluss.
Hatte versucht es selbst zu änder, kommt aber dann ne Fehlermeldung.

Könntet Ihr mir das noch einfügen. plz...

Greetz
Bitte warten ..
Mitglied: pacobay
20.12.2007, aktualisiert 18.10.2012
@Biber hast recht macht immer mehr Spass
@ #intuz# Wo bleibst Du? Du hängst hinterher! Auf Auf

Hallo illy,

>@pacobay
>wie nutzte ich das Script?

Ok offensichtlich doch nicht so einfach für nicht vbs'ler
Dachte das Ding würde für sich selbst sprechen.
Schade & Sorry 4U

Denn mal einige zusätzliche Erklärungen:
(Aktuell liegt im Thread die Version V02 des sriptes vor)


Code mit Copy &paste in einen einfachen editor einfügen

Dann eventuell notwendige Anpassungen an deine Umgebung machen
(Was und Wie wird gleich noch in "Anpassungen der Feinsteuerung" beschrieben)

Wenn Du die Anpassungen gemacht hast, dann das Script einfach abspeichern.
(beipielsweise unter WandelPreislisteV0x.vbs
V03 steht für Version drei des scriptes (kommende Version))

Ablageort praktisch egal
In der Nähe von Input/output wäre aber sinnvoll
Aber mehr unter dem Gesichtspunkt übersichtlichkeit

Aufruf einfach mit Doppelklick
alternativ via start /ausführen mit
C:\WINDOWS\system32\wscript.exe "C:\just4Test\WandelPreislisteV02.vbs"
zumeist geht auch
wscript.exe "C:\just4Test\WandelPreislisteV02.vbs"

Natürlich Pfade entsprechend deiner Ablage anpassen


Anpassungen der Feinsteuerung
(Habe das Script so angelegt, daß Du für den aktuellen Fall
nur einige wenige Konstanten (Const) ändern mußt.)


Innerhalb des Scriptes gibt es am Anfang einen Bereich Deklaration

innerhalb dieses Bereiches findest Du
01.
Const Input        = "C:\just4Test\InputSupp01.txt" 
02.
Const Output      = "C:\just4Test\OutputSupp01.txt"
Dies solltest Du entsprechend deinen Erfordernissen anpassen

unter Umständen noch anpassen TZ
01.
Const TZ =";"       'Trennzeichen
Trennzeichen ist das Zeichen das im Output die Felder voneiander trennt


Der Bereich Feldbeschreibung (INput)
01.
Const P01Bez        = "Teilenummer"                 
02.
Const Part01Start   = 1 
03.
Const Part01Ende    = 13
und folgende P02 ff ist entsprechend Deinen Vorgaben umgesetzt.

Exkurs
Vorbereitung für andere Lieferanten
Habe ich versucht sehr übersichtlich zu gestalten,
damit Du später einmal es relativ einfach auf einen anderen Lieferanten
anpassen kannst.

Wenn es mehr oder weniger Felder geben sollte,
dann wäre sogar durch einfaches auskommentieren bzw. mit Cut&Paste plus lfdNr ändern
recht schnell Anpassungen möglich.

Zusätzlich wäre natürlich entsprechend der Output (HEADLINE & OutDS) anzupassen

vgl.: die Zeilen im Script
01.
HEADLINE=P01Bez&TZ&P02Bez&TZ&P03Bez&TZ&P04Bez&TZ&P05Bez&TZ&P06Bez&TZ&P07Bez&TZ&P08Bez&TZ&P09Bez&TZ&P10Bez&TZ&P11Bez&TZ&"bVKP"&TZ
01.
OutDS=part01&TZ&part02&TZ&part03&TZ&part04&TZ&part05&TZ&part06&TZ&part07&TZ&part08&TZ&part09&TZ&part10&TZ&part11&TZ&bVKP&TZ
Auch relativ leicht möglich ist es dort die Reihenfolge der Felder in der Übergabe anzupassen

ENDE EXKURS


Neu hinzugefügt habe ich in V03 der neuen Variante (kommt noch)

'Soll eine Headline ausgegeben werden JA = 1 Nein = 0

Const HeadlineYesNo = 0

der Defaultwert ist 0 also keine 1. Zeile mit den Feldnammen

Habe auch neu in V03 eingefügt:

'Sollen Leerstellen in den Teilebeschreibungen entfernt werden
Const LSdeleteYN = 0 'JA = 1 Nein = 0


Erklärung im Abschnitt Performance

'Thema Verkaufspreis (in V03)

' Formel für Verkaufspreisfestlegung
'kleiner 5€ 40%, kleiner 50€ 30% und größer 50€ 20%

'Habe hierfür einen Sub geschrieben damit Du es einfacher anpassen kannst

01.
SUB createbVKP 
02.
 
03.
bVKP=part05 
04.
 
05.
		   if bVKP <5 	                then bVKP = CCur (bVKP * 1.4) 
06.
		   if bVKP >= 5 and bVKP < 50	then bVKP = CCur (bVKP * 1.3) 
07.
		   if bVKP >= 50		then bVKP = CCur (bVKP * 1.2) 
08.
 
09.
END SUB    'createbVKP
Bitte einmal überprüfen ob umgesetzt wie gewünscht. ggf ändern

So das ist alles was du in diesem Script drehen kannst solltest
Ende der notwendigen bzw. möglichen Änderungen im Script


Bzgl. Performance

Ist langsamer als Biber's Batch
Das geht natürlich ganz und gar nicht!

Aber habe einiges mehr an Prüfungen und Feldanpassungen integriert

Beispielsweise prüft das script erstmal ob input-datei gefunden wird
Dann ob Outputfile schon vorhanden ist, wenn dann Abfrage obgelöscht werden kann
während des löschens warte ich 5 sec damit die datei sicher gelöscht wurde

dann erst wird die neue outputdatei geöffnet und das Thema Headline wird abgehandelt

erst dann folgt die eigentliche Arbeit im SUB DoTheWork

Bei kleinem Input ich habe beispielsweise z.Zt nur 20 Zeilen
dauert der Vorlauf länger als die Abarbeitung

Die eigentliche Arbeit wird innerhalb des SUB DoTheWork gemacht.
Dieser wird durch die Umwandlung der Felder etwas abgebremst
(führende Nullen bei Teilenummer etc)

Aber das eigentliche Problem ist das entfernen der Leerzeichen
innerhalb der Teilebeschreibung
Die ist suboptimal bzgl. Performance
Habe diesbezüglich eine Thread eröffnet der hoffentlich eine schneller Alternative bringt
vgl.:
http://www.administrator.de/forum/doppelte-leerstellen-innerhalb-einem- ...

'---------------------------

Habe mal gerade ausgetestet mit 1000 zeilen 1:45 mit Leerstellen entfernen
einfacher client also rund 10 DS /sec

Dagegen ohne Leerstellen praktisch direkt jeweils gemessen nach file killed ok

Bei bei 10 Tsd DS ohne Leerstellen unter 2 sec @Biber Meep Meep

Habe daher in V03 eingefügt:

'Sollen Leerstellen in den Teilebeschreibungen entfernt werden
Const LSdeleteYN = 0 'JA = 1 Nein = 0

Und somit die Entfernung der Leerstellen erstmal per default auf No gestellt

Kannst Du also selber steuern ob ja oder nein

'---------------------------

Bzgl:Die Formatierung ist nicht ganz korrekt
Verstehe ich nicht?
Mir zumindest zur Zeit noch unerkärlich, denn normalerweise sind da gar keine Hochkomma vorhanden

aktuell in output bei mir z.B.

01.
Teilenummer;Bezeichnung italienisch;Bezeichnung französisch;Bezeichnung deutsch;Bruttopreis;Rabattkennzeichen;CodCLA;Gewicht in Gramm;TDR;Ersatz-Artikelnummer;Mindestmenge;bVKP; 
02.
1908112;ELEMENTO FILTRO ARIA;CART.FILTRE AIRE;AIR FILTER CARTRIDGE @@@@@@@@@@PATRONE-LUFTFFILTERPATRONE;19,2;9;AC45;0000500;AF;;1;24,96;
Könnte es sein, dass im Input Hochkomma sind?

'---------------------------


Soweit zum aktuellen Sachstand

ciao pacobay

PS das Script V03 will ich nochmal etwas später durchlesen
Ist so eine Angewohnheit erstmal etwas Abstand und dann nochmal drüberschauen
Natürlich werde ich es dann dann sofort mailen

PSPS wie man unschwer erkennen kann habe ich mich mal an den Formatierungen versucht.
und dies wenig glücklich
sorry hoffe es ist trotzdem lesbar

PSPSPS YEAH Bastla Hat gerade eine Antwort bzgl. Leerstellen geantwortet werde ich direkt umsetzten das kann nur gut sein
Bitte warten ..
Mitglied: illy79
20.12.2007 um 10:06 Uhr
Hi,

Das Scipt von #intuz# hilft mir leider momentan nicht weil ich mit php am wenigsten anfangen kann, aber es könnte später mal sehr interessant bei einem autom. Update weden.

@#intuz#
Danke für deinen Ansatz. Bringt mich auf eine Idee vielleicht später einen autom. Update zu integrieren.

Ok offensichtlich doch nicht so einfach
für nicht vbs'ler
Dachte das Ding würde für sich
selbst sprechen.
Schade & Sorry 4U
Doch danke, das Scipt ist sehr einfach und super geschrieben. Nur hatte ich noch nichts mit vbs zu tun und wollte mal nachfragen ob ich das was falsch mache weil ihr gesagt habt wäre schneller. Wobei Performance wie gesagt eher Nebensache.


HEADLINE=P01Bez&TZ&P02Bez&TZ&P03Bez&TZ&P04Bez&TZ&P05Bez&TZ&P06Bez&TZ&P07Bez&TZ&P08Bez&TZ&P09Bez&TZ&P10Bez&TZ&P11Bez&TZ&"bVKP"&TZ
</code>
01.
> OutDS=part01&TZ&part02&TZ&part03&TZ&part04&TZ&part05&TZ&part06&TZ&part07&TZ&part08&TZ&part09&TZ&part10&TZ&part11&TZ&bVKP&TZ 
02.
> 
Auch relativ leicht möglich ist es dort
die Reihenfolge der Felder in der
Übergabe anzupassen
Hm interessant. Diese Zeile hatte ich nicht ganz verstanden.


'Soll eine Headline ausgegeben werden
JA = 1 Nein = 0

Const HeadlineYesNo = 0

der Defaultwert ist 0 also keine 1. Zeile
mit den Feldnammen
'Sollen Leerstellen in den
Teilebeschreibungen entfernt werden
Const LSdeleteYN = 0 'JA = 1 Nein =
0
Meine Güte, sollte nur ein einfache Script werden un keine Hightech Programm, aber danke das Dich so ins Zeug legst.


Erklärung im Abschnitt Performance

'Thema Verkaufspreis (in V03)

' Formel für
Verkaufspreisfestlegung
'kleiner 5€ 40%, kleiner 50€
30% und größer 50€ 20%

Supi. Danke

Bei kleinem Input ich habe beispielsweise
z.Zt nur 20 Zeilen
dauert der Vorlauf länger als die
Abarbeitung
Komisch. Bei mir gehts irgendwie sehr lange...
Naja egal. Hauptsache hab was

Bzgl:Die Formatierung ist nicht ganz
korrekt
Verstehe ich nicht?
Mir zumindest zur Zeit noch
unerkärlich, denn normalerweise sind da
gar keine Hochkomma vorhanden
Ja, aber die normale Trennung sollte mit Hochkommas sein und die Datensätze mit "" eingegrenzt. Aber das ist eher unwichtig. Kann ich im Import unseres Programmes umstellen.


Greetz illy
Bitte warten ..
Mitglied: pacobay
20.12.2007 um 10:20 Uhr
Warte noch einen kleinen Moment
setzte die Infos aus dem anderen Thread gerade um
das Ding von Bastla läuft super performant

Aber das mit den Hochkommas habe ich immer noch nicht ganz verstanden

Alle Datensätze in Hochkomma einschließen?
Alle Felder zusätzlich in Hochkomma??
wäre technisch kein Problem
Aber i.A. steht das beim dem Inport für handelt sich um stringwerte (Text)
Keine Unterscheidung zwischen beispielsweise:
integer ganzahl (Mindestbestellmenge TeileNummer)
string text z.B. teilebezeichnungen
Preise Cur Währung also besondere Zahl ??
Gibt da sonst häufig Probleme Komma bzw Punkt 1.25 € oder 1,25 €

aber wie auch immer
Dein Script ist gleich fertig
muß aber noch testen und dann Testteile rausnehmen
15-bis 30 min

ciao pacobay
Bitte warten ..
Mitglied: illy79
20.12.2007 um 11:13 Uhr
Hi,


Aber das mit den Hochkommas habe ich immer
noch nicht ganz verstanden

Alle Datensätze in Hochkomma
einschließen?
Nein Datensätze in Anführungszeichen und Trennszeichen Semikolon
"TeilenNr";"BEZ"...

Aber wie gesagt, nicht so schlimm... Kanns im Import ändern.

Greetz
Bitte warten ..
Mitglied: Biber
20.12.2007 um 11:30 Uhr
Moin illy,

diese Brutto-Aufschlagsformel lässt sich im der Batch-Variante auch schmerzfrei nachrüsten.


Dazu folgendes (sinngemäß) im Batch nachrüsten:

Erst einen Bugfix: Ändere Zeile
Set "BR_PREIS=%line:~ 214, 10%" && Rem POS 214-225 Bruttopreis
zumindest gedanklich in
Set "BR_PREIS=%line:~ 214, 12%" && Rem POS 214-225 Bruttopreis

...denn insgesamt hätte dieses "Feld" ja 12 Stellen Länge, nicht 10

Den lassen wir aber ganz weg
Wir zerlegen diesen Zahlen-als-Text-mit-führenden Nullen in 2 Zahlen (vor dem Komma und Nachkommastellen).
Ist nötig, da im Batch nicht mit Nachkommastellen gearbeitet werden kann.

01.
:: Ganz oben bei den allgemeinen SETs 
02.
SET /a OneBillion=1000000000 
03.
.... 
04.
 
05.
:: Neu statt der Zeile SET BR_PREIS= ..." oben: 
06.
 
07.
SET "BR_VK=1%line:~ 214, 9%" 
08.
SET "BR_NK=1%line:~ 224, 2%" 
09.
 
10.
:: dann sieht der Wert %BR_VK% so aus: "1000000015" bei einem Eintrag "000000015,32" 
11.
set /a br_vk=br_vk-onebillion 
12.
SET /a br_nk=br_nk-100 
13.
 
14.
:: jetzt hat br_vk den Wert 15 (als Zahl) und br_nk den Wert  32 als Zahl 
15.
Set /a BR_inCent=(100*br_vk) + br_nk 
16.
:. jetzt hat br_inCent den Wert 1532 
17.
::Standard-Aufschlag 40%.... 
18.
Set /a Aufschlag=140 
19.
if BR_incent GEQ  500 set /a "Aufschlag=130" 
20.
if BR_incent GEQ 5000 set /a "Aufschlag=120" 
21.
Set /a Br_MitAufschlag=(br_incent*Aufschlag) / 100 
22.
:: ergibt bei einem Wert von 1532--> (1532*130)/100 = 1991 
23.
:. ...
Diese Werte BR_inCent und BR_MitAufschlag kannst Du dann weiterreichen an die CSV-Datei.
Entweder als Zahlen oder wieder zerlegt in VK/NK-Stellen

Grüße
Biber
Bitte warten ..
Mitglied: pacobay
20.12.2007, aktualisiert 18.10.2012
01.
Hallo Leute, 
02.
hat doch etwas länger gedauert hatte zwischenzeitlich Mist gebaut. 
03.
 
04.
Aber nun glaube ich: Ich habe fertig! 
05.
 
06.
Hat mir bisher viel Spass gemacht und habe auch was dabei gelernt! 
07.
 
08.
'------------------------------------------------------------------- 
09.
 
10.
Nun werden durch den SUB DoTheWork  
11.
10 TSd Datensätze in unter 10 sekunden verarbeitet   meep meep :-) 
12.
Bastla sei Dank  
13.
 
14.
'-------------- 
15.
Daher auch folgende Änderung: 
16.
 
17.
'Sollen Leerstellen in den Teilebeschreibungen entfernt werden 
18.
Const LSdeleteYN = 1    'JA = 1 Nein = 0 
19.
 
20.
' Ist auf default ja (1) gesetzt da nun kein Problem mehr  
21.
' Im Prinzip benötigen wir den Schalter nicht mehr 
22.
' Aber wo er schon mal da ist 
23.
 
24.
'------------------------------------------------------------------- 
25.
Das mit den Hochkommas habe ich gelassen 
26.
 
27.
By the way  
28.
Datensatz steht i.A. für die ganze Datenzeile 
29.
der aus verschiedenen Feldern Feldern besteht. 
30.
 
31.
'------------------------------------------------------------------- 
32.
'-------------------------------------------------------------------

@illy

Meine Güte, sollte nur ein einfache Script werden un keine Hightech Programm, aber danke das Dich so ins Zeug legst.

Danke für die Blumen!

Aber von wegen einfaches Script, hier wird nur Qualität geliefert
Und deshalb Just 4 fun auch noch ein GNU-Copyright beigefügt
in der Art:
Copyright (C) 2007 by
bastla, biber, illy79, pacobay
You can find us @administrator.de
We wrote this for educational purpose and just 4 fun
Now we distributed it in the hope that it will be useful for You
It is distributed under the terms of the GNU General Public License
blabla

Kannst Du unter Main einfach auskommentieren
Viel Spass & Erfolg

pacobay

PS. Sollte noch Fragen vorhanden sein und Tread geschlossen auch PM möglich
Denke da an Anpassung für andere Lieferanten
Aber kann ich nichts versprechen, verfüge leider nicht immer über soviel Zeit

01.
'------------------------------------------------------------------- 
02.
 
03.
Aktuelles Script ist WandelPreislisteV06.vbs 
04.
  
05.
(V03+V04+04 werden nicht mehr veröffentlicht sind veraltet) 
06.
'-------------------------------------------------------------------

01.
' VB Script Document 
02.
'Erstellt als helptesk 4 Thread 
03.
'http://www.administrator.de/Preislisten_umwandeln.html 
04.
'ergänzender Tread 
05.
' http://www.administrator.de/forum/doppelte-leerstellen-innerhalb-einem-string-entfernen-vbs-76371.html 
06.
 
07.
'20.12.2007 11:35:05 
08.
'pacobay 
09.
 
10.
'testet on XPP / WSH 5.7 für XP 
11.
 
12.
'target 
13.
'	Umwandlung von Daten aus einer txtdatei (mit feste Feldgroesse) 
14.
'   in eine txtdatei von Datensätze mit Trennzeichen 
15.
'   diverse Feldumwandlungen Trim etc 
16.
'   Code soll möglichst für Nicht- VBSler zu warten sein 
17.
'   Nicht- VBSler müssen lediglich die Konstanten (Const) anpassen 
18.
'   Die Aufteilung der Datensätze in Parts soll es ihm ermöglichen 
19.
'   die Anzahl der Parts beliebig zu verändern 
20.
'	via del or copy&paste+laufende Nr anpassen UND OUTPUTSTRING (OutDS) 
21.
'   unter Umständen Bereich Headline scharfmachen 
22.
'   Datenkonvertierungen sind ggf. löschenbar 
23.
'********************************************************************* 
24.
25.
Option Explicit 
26.
27.
'Deklaration der Objekte 
28.
Dim WshShell 
29.
Set WshShell = Wscript.CreateObject("Wscript.Shell") 
30.
'--------------------------- 
31.
Dim FSO, FileIn, FileOut 
32.
Set FSO = CreateObject("Scripting.FileSystemObject") 
33.
'--------------------------- 
34.
35.
'Ein paar Variablen für meine Art der Popup Messages 
36.
37.
DIM strTITELs		   ' Meldungstitel im Script festgelegt    [InBox & PopUp] 
38.
DIM strMSGs            ' Meldungstexte für Messages                    [PopUp] 
39.
DIM numShowTimeS       ' im Script festgelegte Anzeigezeit in sec      [PopUp] 
40.
DIM numBtnCodeR        ' ReturnCode Wert des geklickten Buttons        [PopUp] 
41.
'objCRPopUp 
42.
'--------------------------- 
43.
44.
' Diesen Abschnitt(Pfad&Dateiname)ensprechend anpassen 
45.
46.
Const Input        = "C:\just4Test\InputSupp10000.txt" 
47.
Const Output       = "C:\just4Test\OutputSupp01.txt" 
48.
49.
'--------------------------- 
50.
' Das Trennzeichen in dem Output definieren ggf. anpassen 
51.
52.
Const TZ =";"                       'Trennzeichen 
53.
'--------------------------- 
54.
Dim Headline 
55.
 
56.
 'Soll eine Headline ausgegeben werden JA = 1 Nein = 0 
57.
Const HeadlineYesNo = 1 
58.
 
59.
 
60.
'Thema: Headline 
61.
'Unter bestimmten Umständen kann eine Kopfzeile mit den Feldbezeichnungen gewünscht werden 
62.
' Achtung als 12ter Wert ist noch der BruttoVerkaufspreis (bVKP) angefügt 
63.
64.
'--------------------------- 
65.
'Sollen Leerstellen in den Teilebeschreibungen entfernt werden 
66.
Const LSdeleteYN = 1    'JA = 1 Nein = 0 
67.
 
68.
' Ist auf default ja (1) gesetzt da nun kein Problem mehr dank Bastla 
69.
' Im Prinzip benötigen wir den Schalter nicht mehr 
70.
' Aber wo er schon mal da ist 
71.
'--------------------------- 
72.
 
73.
Dim AZDs                            'Anzahl der verarbeiteten Datensätze 
74.
'--------------------------- 
75.
76.
Dim InDS							'InputDatensatz 
77.
Dim OutDS							'OutputDatensatz 
78.
'--------------------------- 
79.
80.
' Aus Deinem Posting geht hervor: 
81.
  ' 1-13    Teilenummer 
82.
  ' 14-63   Bezeichnung italienisch 
83.
  ' 64-113  Bezeichnung französisch 
84.
  ' 114-213 Bezeichnung deutsch 
85.
  ' 214-225 Bruttopreis 
86.
  ' 226-227 Rabattkennzeichen 
87.
  ' 228-231 CodCLA 
88.
  ' 232-238 Gewicht in Gramm 
89.
  ' 239-240 TDR 
90.
  ' 241-253 Ersatz-Artikelnummer 
91.
  ' 254-257 Mindestmenge 
92.
93.
'--------------------------- 
94.
95.
96.
97.
DIM   Part01 
98.
Const P01Bez        = "Teilenummer"                 
99.
Const Part01Start   = 1 
100.
Const Part01Ende    = 13 
101.
102.
DIM   Part02 
103.
Const P02Bez        = "Bezeichnung italienisch" 
104.
Const Part02Start   = 14 
105.
Const Part02Ende    = 63 
106.
107.
DIM   Part03 
108.
Const P03Bez        = "Bezeichnung französisch" 
109.
Const Part03Start   = 64 
110.
Const Part03Ende    = 113 
111.
112.
DIM   Part04 
113.
Const P04Bez        = "Bezeichnung deutsch" 
114.
Const Part04Start   = 114 
115.
Const Part04Ende    = 213 
116.
117.
DIM   Part05 
118.
Const P05Bez        = "Bruttopreis" 
119.
Const Part05Start   = 214 
120.
Const Part05Ende    = 225 
121.
122.
DIM   Part06 
123.
Const P06Bez        = "Rabattkennzeichen" 
124.
Const Part06Start   = 226 
125.
Const Part06Ende    = 227 
126.
127.
DIM   Part07 
128.
Const P07Bez        = "CodCLA" 
129.
Const Part07Start   = 228 
130.
Const Part07Ende    = 231 
131.
132.
DIM   Part08 
133.
Const P08Bez        = "Gewicht in Gramm" 
134.
Const Part08Start   = 232 
135.
Const Part08Ende    = 238 
136.
137.
DIM   Part09 
138.
Const P09Bez        = "TDR" 
139.
Const Part09Start   = 239 
140.
Const Part09Ende    = 240 
141.
142.
DIM   Part10 
143.
Const P10Bez        = "Ersatz-Artikelnummer" 
144.
Const Part10Start   = 241 
145.
Const Part10Ende    = 253 
146.
147.
DIM   Part11 
148.
Const P11Bez        = "Mindestmenge" 
149.
Const Part11Start   = 254 
150.
Const Part11Ende    = 257 
151.
152.
153.
DIM bVKP							' BruttoVK ist im Output zusäzlich als 
154.
									' letzter Wert hinzugefügt 
155.
156.
157.
'********************************************************************* 
158.
'Ende der Deklaration 
159.
'********************************************************************* 
160.
 
161.
'Thema Verkaufspreis 
162.
 
163.
' Formel für Verkaufspreisfestlegung 
164.
'kleiner 5€ 40%, kleiner 50€ 30% und größer 50€ 20% 
165.
 
166.
'Habe hieefür einen Sub geschrienen damit Du es einfacher anpassen kannst 
167.
 
168.
SUB createbVKP 
169.
 
170.
bVKP=part05 
171.
 
172.
		   if bVKP <5 					then bVKP = CCur (bVKP * 1.4) 
173.
		   if bVKP >= 5 and bVKP < 50	then bVKP = CCur (bVKP * 1.3) 
174.
		   if bVKP >= 50				then bVKP = CCur (bVKP * 1.2) 
175.
 
176.
END SUB    'createbVKP 
177.
 
178.
'********************************************************************* 
179.
180.
'Einige Hilfsprozeduren 
181.
182.
'für  Funktion Ersetze 
183.
dim objRA, SuchString, Suchmuster, ErsatzMuster 
184.
 
185.
Suchmuster   = " +"   ' zwei Leerstellen 
186.
ErsatzMuster = " "    ' eine Leerstellen 
187.
 
188.
Function Ersetze(SuchString,Suchmuster, ErsatzMuster) 
189.
190.
 SET objRA = new RegExp 
191.
 objRA.pattern = Suchmuster            ' Legt das Suchmuster fest. 
192.
 objRA.Global = True               ' Legt globales Anwenden fest. 
193.
194.
  ' Führe nun die Ersetzung durch und weise es als Funktionswert zu. 
195.
    Ersetze=objRA.Replace(SuchString,ErsatzMuster) 
196.
 End Function 
197.
198.
'------------------------------------------------------------------- 
199.
200.
SUB CheckInFile 
201.
' Püfen ob Inputdatei gefunden werden kann 
202.
' if yes then öffnen als Vorbereitung zur weiteren Verarbeitung 
203.
' If not Info & Abbruch 
204.
205.
If fso.FileExists(Input) then 
206.
   Set FileIn  = FSO.OpenTextFile( Input, 1, true) 
207.
else 
208.
209.
numShowTimeS   = 0 
210.
strTITELs	   ="Input-Fehler" 
211.
strMSGs       =+_ 
212.
"Folgende Datei konnte nicht gefunden werden!" &chr(13)&chr(13)&+_ 
213.
Input &chr(13)&chr(13)&+_ 
214.
"Das Script wird abgebrochen"&chr(13)&chr(13)&chr(9)&"Pls check:"&chr(9)&chr(9)&"Inputfile-Konstante (in the script)"&chr(13)&chr(9)&"or:" &chr(9)&chr(9)&"The Input-File himself" 
215.
216.
WshShell.popup strMSGs,numShowTimeS,strTITELs,16+4096 
217.
218.
Wscript.Quit 
219.
end if 
220.
221.
END SUB 'CheckInFile 
222.
223.
'------------------------------------------------------------------- 
224.
225.
SUB CheckOutFile 
226.
227.
' Prüfen ob Outputdatei bereits vorhanden ist 
228.
' if not weiter mit öffnen der Datei als Vorbereitung zur weiteren Verarbeitung 
229.
230.
' if there then: Abfrage ob diese gelöscht werden kann Optionen: Ok oder Abbruch 
231.
	 'Option: OK 
232.
	 	 ' dann halt löschen und weiter mit 
233.
	 	 ' öffnen der Datei als Vorbereitung zur weiteren Verarbeitung 
234.
235.
	 'Option: Abbrechen 
236.
	 		 'Abbruch 
237.
238.
239.
If fso.FileExists(Output) then 
240.
numShowTimeS   = 0 
241.
strTITELs	   ="Check 4 OutputFile" 
242.
strMSGs       =+_ 
243.
"Die vorgesehene Output Datei ist bereitsvorhanden!" &chr(13)&chr(13)&+_ 
244.
Output &chr(13)&chr(13)&+_ 
245.
"Kann die Datei gelöscht werden?"&chr(13)&chr(13)&chr(9)&"OK:"&chr(9)&chr(9)&"delete and go on"&chr(13)&chr(9)&"Abbrechen:" &chr(9)&"Scriptende" 
246.
247.
numBtnCodeR=WshShell.popup(strMSGs,numShowTimeS,strTITELs,1+32+4096) 
248.
249.
250.
'Auswertung des Geklickten 
251.
252.
SELECT CASE numBtnCodeR 
253.
         CASE  1  ' OK 
254.
		 	   fso.DeleteFile(Output) 
255.
			   Wscript.sleep 5000  'gibt dem Script etwas Zeit 
256.
		 	   Wscript.echo "file should be killed" 
257.
258.
         CASE  2  ' Abbrechen 
259.
         	   Wscript.echo "Abbruch durch Anwender" 
260.
         	   Wscript.Quit 
261.
      END SELECT 
262.
263.
else 
264.
' Na dann gehts einfach weiter 
265.
end if 
266.
267.
 ' öffnen der Datei als Vorbereitung zur weiteren Verarbeitung 
268.
269.
Set FileOut = fso.OpenTextFile( output,8,true) 
270.
271.
'--------------------------- 
272.
273.
END SUB 'CheckInFile 
274.
275.
'------------------------------------------------------------------- 
276.
 
277.
SUB WriteHead 
278.
if HeadlineYesNo = 1 then 
279.
280.
HEADLINE=P01Bez&TZ&P02Bez&TZ&P03Bez&TZ&P04Bez&TZ&P05Bez&TZ&P06Bez&TZ&P07Bez&TZ&P08Bez&TZ&P09Bez&TZ&P10Bez&TZ&P11Bez&TZ&"bVKP"&TZ 
281.
FileOut.WriteLine(HEADLINE)          'schreibt OutDs in Outputfile 
282.
283.
else 
284.
WScript.echo "No Headline" 
285.
END IF 
286.
 
287.
END SUB      'WriteHead 
288.
 
289.
'------------------------------------------------------------------- 
290.
 
291.
 
292.
'------------------------------------------------------------------- 
293.
'Der eigentliche ArbeitsSUB 
294.
'------------------------------------------------------------------- 
295.
 
296.
SUB DoTheWork 
297.
'Der InputFile (FileIn) wurde schon unter CheckInFile geöffnet 
298.
 
299.
' bis InputFile zu Ende ist, immer weiter machen 
300.
Do While Not (FileIn.atEndOfStream) 
301.
InDS = FileIn.Readline         ' eine Zeile lesen und als Datensatz DS verwenden 
302.
 
303.
'---------------------- 
304.
'NUN wir der jeweilige inDS in seine Bestandteile (parts01 bis 11) zerlegt 
305.
' Die Ergebnisse habe ich zumeist zusätzlich "getrimmt" 
306.
 
307.
' TRIM 
308.
' gibt eine Kopie einer Zeichenfolge zurück, die keine führenden Leerzeichen 
309.
' (LTrim), keine nachgestellten Leerzeichen (RTrim) oder weder führende noch 
310.
' nachgestellte Leerzeichen (Trim) enthält. 
311.
 
312.
 
313.
part01 = trim (right(Left(inDS,part01Ende),part01ENDE-part01Start+1)) 
314.
 
315.
'__________ 
316.
 
317.
' Part01 fertig aber gleich noch die gewünschte Veränderung des Inhaltes. 
318.
 
319.
'Kann man bei der Teilenummer die führenden Nullen irgendwie entfernen? 
320.
'Ja wie folgt: 
321.
Do until Left(part01,1)<>"0" 
322.
part01=right(part01,len(Part01)-1) 
323.
loop 
324.
 
325.
'__________ 
326.
'__________ 
327.
 
328.
'Weiter mit den nächsten Parts 
329.
 
330.
part02 = trim (right(Left(inDS,part02Ende),part02ENDE-part02Start+1)) 
331.
part03 = trim (right(Left(inDS,part03Ende),part03ENDE-part03Start+1)) 
332.
part04 = trim (right(Left(inDS,part04Ende),part04ENDE-part04Start+1)) 
333.
 
334.
'__________ 
335.
 
336.
' Wieder gleich noch die gewünschte Veränderung des Inhaltes. 
337.
' Kann man bei den Teilebezeichungen die Leerstellen entfernen? 
338.
'__________ 
339.
if LSdeleteYN=1 then 
340.
part02= Ersetze(part02,Suchmuster, ErsatzMuster) 
341.
part03= Ersetze(part03,Suchmuster, ErsatzMuster) 
342.
part04= Ersetze(part04,Suchmuster, ErsatzMuster) 
343.
END IF 
344.
'__________ 
345.
346.
'Bruttopreis (Einkauf) 
347.
'Abweichend kein Trim sondern CCur-Funktion 
348.
'Gibt einen Ausdruck zurück, der in einen Wert vom Typ Variant 
349.
'mit Untertyp Currency konvertiert wurde. 
350.
351.
part05 = CCur (right(Left(inDS,part05Ende),part05ENDE-part05Start+1)) 
352.
353.
'__________ 
354.
355.
'Thema Verkaufspreis 
356.
357.
createbVKP  	'ruft den SUB createbVKP auf 
358.
359.
'__________ 
360.
361.
362.
part06 = trim (right(Left(inDS,part06Ende),part06ENDE-part06Start+1)) 
363.
part07 = trim (right(Left(inDS,part07Ende),part07ENDE-part07Start+1)) 
364.
part08 = trim (right(Left(inDS,part08Ende),part08ENDE-part08Start+1)) 
365.
part09 = trim (right(Left(inDS,part09Ende),part09ENDE-part09Start+1)) 
366.
part10 = trim (right(Left(inDS,part10Ende),part10ENDE-part10Start+1)) 
367.
'__________ 
368.
369.
part11 = trim (right(Left(inDS,part11Ende),part11ENDE-part11Start+1)) 
370.
371.
'__________ 
372.
373.
' Die Mindestbestellmenge hat wie Teilenummer führenden Nullen 
374.
' also auch weg damit 
375.
Do until Left(part11,1)<>"0" 
376.
part11=right(part11,len(Part11)-1) 
377.
loop 
378.
'__________ 
379.
'__________ 
380.
381.
382.
' Nun erfolgt Die Zusammenstellung des Übergabestrings 
383.
384.
' Der Übergabesrting habbe ich in recht primitiver Form zusammengestellt 
385.
' Aber durch diese Art der Übergabe kannst Du auch als Nicht-Vbsler 
386.
' die Reihenfolge leicht anpassen. 
387.
' Je nachdem in welcher Reihenfolge Sie für den Import verwendet werden sollen 
388.
' Auf die Verbindung mit TZ dem Trennzeichen achten! 
389.
390.
' Achtung als 12ter Wert ist noch der BruttoVerkaufspreis angefügt 
391.
392.
OutDS=part01&TZ&part02&TZ&part03&TZ&part04&TZ&part05&TZ&part06&TZ&part07&TZ&part08&TZ&part09&TZ&part10&TZ&part11&TZ&bVKP&TZ 
393.
394.
'Und wegschreiben 
395.
FileOut.WriteLine(outDS)          'schreibt OutDs in Outputfile 
396.
397.
'_______________ 
398.
399.
'Noch die Anzahl um eins erhöhen rein zu Statistikzwecken 
400.
AzDs=AZDs+1 
401.
402.
'_______________ 
403.
404.
loop   ' und weiter zur und dann auf zur nächsten Input-Zeile 
405.
406.
407.
END SUB                 'DoTheWork 
408.
409.
'------------------------------------------------------------------- 
410.
'------------------------------------------------------------------- 
411.
412.
413.
' Noch ein kleiner HilfSUB Um das Ende anzuzeigen 
414.
415.
SUB Fertig 
416.
WScript.Echo "Ich habe fertig!" &Chr(13)&Chr(13)&+_ 
417.
"Anzahl der verarbeiteten Zeilen: "&AzDs 
418.
END SUB 'Fertig 
419.
420.
421.
'------------------------------------------------------------------- 
422.
423.
'Ein MainSUB um die einzelnen SUBs aufzurufen 
424.
425.
SUB MAIN 
426.
    Copyright 
427.
	CheckInFile 
428.
	CheckOutFile 
429.
	WriteHead 
430.
	DoTheWork 
431.
	Fertig 
432.
END SUB 
433.
 
434.
'Der letzendliche Aufruf des ganzen Tralala 
435.
436.
MAIN 
437.
438.
'------------------------------------------------------------------- 
439.
' Just 4 fun auch noch ein Copyright 
440.
' Kannst Du einfach unter Main auskommentieren 
441.
 
442.
SUB Copyright 
443.
 
444.
DIM objCRPopUp   'Das ja notwendige Objekt 
445.
set objCRPopUp = WScript.CreateObject("WScript.Shell") 
446.
Dim msg 
447.
' ------------------------------------------------------------------------ 
448.
msg=   chr(9) & "Copyright (C) 2007 by" & chr(13)&chr(9)& "bastla, biber, illy79, pacobay" & chr(13) & +_ 
449.
chr(9) & "You can find us @administrator.de" & chr(13) & chr(13) +_ 
450.
 "We wrote this for educational purpose and just 4 fun. " & chr(13) &+_ 
451.
 "Now we distributed it in the hope that it will be useful for You." & chr(13)& chr(13) +_ 
452.
chr(9) & chr(9)    & "    ____________"&  chr(13)&  chr(13)&  chr(13) +_ 
453.
"It is distributed under the terms of the GNU General Public License." & chr(13) & chr(13) +_ 
454.
"And under those terms You have a royalty-free right to use, modify,"& chr(13) +_ 
455.
"reproduce and distribute the Files (and/or any modified version) in" &chr(13)+_ 
456.
"any way You find useful!" & chr(13)& chr(13) +_ 
457.
"Provided that in doing so, You agree that we gives no warranty," & chr(13) +_ 
458.
"or has any obligations or liability. Even without the implied warranty of" & chr(13) +_ 
459.
"merchantability or fitness for a particular purpose." & chr(13)&  chr(13) +_ 
460.
chr(9) & chr(9)    & "      ____________"&  chr(13)&  chr(13)&  chr(13) +_ 
461.
"See the GNU General Public License for more details published by the Free" & chr(13) +_ 
462.
"Software Foundation; either version 2  of the License, or (at your option)" & chr(13) +_ 
463.
"any later version."& chr(13)& chr(13)+_ 
464.
"You should have received a copy of the GNU General Public License" & chr(13) +_ 
465.
"along with this program; if not, write to the Free Software Foundation," & chr(13) +_ 
466.
"Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA." 
467.
 
468.
' ------------------------------------------------------------------------ 
469.
 
470.
objCRPopUp.Popup msg,0,"Copyright",64+4096 
471.
 
472.
END SUB 		'Copyright 
473.
474.
'------------------------------------------------------------------- 
475.
476.
' EOF 
477.
 
Bitte warten ..
Mitglied: illy79
20.12.2007 um 13:15 Uhr
Hi,

hab noch ein kleines Problem. Zwischen Bezeichnung Eng und Deutsch fehlt Trennzeichen in der Output.

An der OutDNS liegts glaub nicht, aber woran dann???

Greetz
Bitte warten ..
Mitglied: Biber
20.12.2007 um 13:38 Uhr
@illy79
....Eng und Deutsch fehlt Trennzeichen in der Output.
Könnte daran liegen, dass sich pacobay an Deine Input-Format-Spezifikation gehalten hat und ich nicht. Bei pacobay gibt es kein "englisch".
Nach Deiner Beschreibung gibt es nicht eine BEZ_ENG in Länge 50 und eine BEZ_DEU in Länge 50, sondern nur eine BEZ_DEU in Länge 100.

Siehe die Zeile mit "glaub ich nicht" in meinen Batch-Varianten.
Und pacobay hat den Fehler extra dringelassen, um zu prüfen, ob Du den Code verstanden hast und selbst anpassen kannst.

Grüße
Biber
Bitte warten ..
Mitglied: illy79
20.12.2007 um 15:01 Uhr
Hi,

Na da hätt ich auch selber draufkommen können, aber wohl vor lauter Bäumen den Wald nicht gesehen...

Das abändern sollte kein Problem sein.

In diesem Sinne sollte es das gewesen sein. Ihr habt mir hier mächtige Werkzeuge mitgegeben. Vielen Dank an euch alle.

Wünsche euch schöne Weihnachten und eine guten Rutsch.

Greetz illy
Bitte warten ..
Mitglied: bastla
20.12.2007 um 20:04 Uhr
Hallo an alle hier!

Da ich mich nun schon so unverhofft im Copyright wiederfinde, sollte ich vielleicht auch wirklich noch etwas beitragen ...

In der aktuellen Fassung des "SUB createbVKP" fehlt mir das Abtrennen der einzelnen Preisstufen, wodurch der etwas unschöne Effekt entstehen könnte, dass etwa bei einem EPreis von EUR 40,00 ein VPreis von EUR 62,40 ermittelt würde - Erklärung dafür: Nach dem Aufschlag von 30 % (auf EUR 40,00) beträgt der Wert der Variablen bVKP 52 (und ist somit > 50), daher kommen dann ganz fröhlich nochmals 20 % dazu - kein Problem, wenn's der Markt hergibt , ansonsten aber vielleicht besser
01.
SUB createbVKP 
02.
bVKP=part05 
03.
	If bVKP <5 Then 
04.
		bVKP = CCur (bVKP * 1.4) 
05.
	ElseIf bVKP < 50 Then 
06.
		bVKP = CCur (bVKP * 1.3) 
07.
	Else 
08.
		bVKP = CCur (bVKP * 1.2) 
09.
	End If 
10.
END SUB    'createbVKP
oder (wie bei Biber) nur den Zuschlagsatz anhand der Preisstufe festlegen und die Preisberechnung danach ausführen.

Noch als Anmerkung: Wenn's nicht VBS wäre, hätte ich natürlich für ein "Select Case" plädiert, aber leider...

Grüße
bastla

P.S.: @pacobay - Was Du da treibst, fällt definitiv nicht unter meine persönliche Definition von "Scripting" (da kommen ua Merkmale wie "quick" und "dirty" vor) - insofern ist der Thread völlig zu Recht vorausschauend unter "Entwicklung" erstellt worden.
Respect
Bitte warten ..
Mitglied: Biber
21.12.2007 um 09:06 Uhr
Guten Morgen alle,

nun will ich doch auch noch ein paar allgemeine Anmerkungen zu diesem Thread loswerden.

Erstens: ein sehr schöner Thread - ich denke, der könnte einigen anderen nützen.
Vor allem, weil es hier mehr um schrittweise Annäherung und Auflösung eines erstmal komplexen Sachverhalts geht - eben um Entwicklung.

Weil ich auch so einen Verlauf vermutete, habe ich damals diesen Thread von "Off Topic" hierher verschoben.

Sehr schön finde auch illy79s letzten Kommentar, den ich frei übersetzen möchte mit:
"Vielen Dank, bitte nicht weiter dran Perfektionieren - ich habe jetzt einen Lösungsansatz und damit ist es gut."

@illy79
Noch drei Punkte, die ich in der Praxis nie, nie, nie tun würde:
  • nie würde ich zu importierende Daten manipulieren (von Zeichensatz-Konvertierung oder nötigen Feldtyp-Anpassungen, z.B. Datumswerten abgesehen). Sowohl die Inhalts-Änderung der Bezeichnungsfelder, also das Herausnehmen von Leerzeichen zwischen einzelnen Worten wie auch das Dazumogeln des "VK_mit_Aufschlag" mit einem eigenen Algorithmus - gehört für mich definitiv nicht zu einem Prozessschritt "Übernahme/Import von Fremd-Daten".
  • ebenfalls niemals würde ich, wenn denn doch eine Datenbank dahinterhängt, irgendwelche "Berechne VK als EK *Aufschlag"-Berechnungen mit einem Skript machen lassen. Genau für solche Aufgaben habe ich den Krams doch in einer Datenbank, damit ich nicht eine Textdatei analysieren, interpretieren und in pro Zeile in 20 Hilfsvariablen packen muss.
  • und ich würde niemals die Inputdatei-Struktur, die Feldbeschreibungen/Feldoffsets hart verdrahtet im Sourcecode halten, sondern diese Daten aus einer "Importfile-Strukturdatei" lesen. So dass der Code auch weiterverwendbar ist, wenn mal ein anderer/geänderter Satzaufbau verarbeitet wird.

Aber wie es bei uns Entwicklern so schön heißt: "Das kommt im nächsten Release."
Also nochmals: allen Beteiligten vielen Dank für diesen Thread.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Windows Server
Windows Server 2016 Datacenter - Evaluation in Datacenter umwandeln (3)

Tipp von Systembastler zum Thema Windows Server ...

Batch & Shell
gelöst Batch-Datei in Exe-Datei umwandeln - .exe im Autostart (7)

Frage von Luuke257 zum Thema Batch & Shell ...

VB for Applications
Csv in xml umwandeln mit VBA (8)

Frage von 130771 zum Thema VB for Applications ...

Vmware
gelöst VHD in VMDK umwandeln - Welches Programm nehmen ? (4)

Frage von donnyS73lb zum Thema Vmware ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...

DSL, VDSL
DSL-Signal bewerten (8)

Frage von SarekHL zum Thema DSL, VDSL ...