Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 23
  1. #1
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65

    Datei öffnen, eine wert auslesen, handeln, neue Datei schreiben, starten

    hi

    jetzt wird es zähfliesend!

    ich müße ein für den profi kleines, aber für mcih großes programm schreiben!

    wenn mir eine hilf mache ich es unter unix, ansonsten werde ich es mit Fortran (ja ich bin alt) machen denn das kann ich so einigermasen

    ich muß eine datei öffnen, dann eine wert auslesen und danach entscheiden
    bei "1" muß ich eine kleine datei schriben mit dessen hilfe ich mittesl ftp etwas lösche
    dann muß ich die erste datei wieder öffnen und werte auslesen. dazu bräuchte ich noch die dateidaten, uhrzeit, datum und name ohne endung

    uas all diesen werten mache ich eine input datei die ich dann in ein labordatensystem (Lims QLS) einlese

    wenn mir einer helfen würde wäre das echt prima

    er muß wohle nerven aus drahtseilen haben

    liebe grüße

    Frank müller

  2. #2
    Mouse Organist Avatar von Xanti
    Registriert seit
    05.09.2004
    Beiträge
    1.855
    Das einfachste wäre, wenn Du ein konkretes Beispiel angibst, wie die Datei mit den Ausgangsdaten aussieht sowie wie die Input-Datei aussehen muss.

    Gruss, Xanti

    <@Agnar> heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int

  3. #3
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65
    Okay

    fangen wir mal an!

    ich habe eine datei, dess namen steht in einer varaibeln drin!

    z.b. so: c:/qls/qls/kln/1_105014.fax

    zuerst brauche ich das datum die uhrzeit und den dateinamen davon und zwar in eine variable damit ich sie später weiter verarbeiten kann

    in der ersten zeile steht eine 0 oder 1

    wenn eine null drin steht fliegt sie auf den müll bei einer 1 muß ich weiterlesen

    so sieht die datei aus

    1
    0
    0
    Betreff 024212222222 Nr 06-00840 , sent


    Ich brauche nun noch der wert der 3 zeile
    die telefonummer und die nummer 06... und den text hinter dem komma

    aus all den daten wir dann folgene datei geschrieben
    .DBI 1 FAXREP 1
    .KEY "1_105014"
    .DDI FAXMES 0 1 "sent"
    .DDI FAXTEL 0 1 "024212222222 "
    .DDI FAXZK2 0 1 "06-03062"
    .DDI FAXDAT 0 1 "13.12.2006"
    .DDI FAXZEI 0 1 "15:36"
    .DDI FAXERR 0 1 "0"
    .DDI FAXSYS 0 1 "TOBIT"
    .DDI FAXKUN 0 1 &ZK2 06-03062 KBEZ
    .DDI LTIME 0 1 @¹h:²m


    die inversen felder sind die inhalte der variablen

    so das war nun die einen datei

    zusätzlich baruche ich noch eine datei

    darim steht im prinzip nur das drin
    **********************

    user anonymous

    delete 1_105014.$$$ <- dateiname aber mit dem $$$ am ende
    quit
    ********************************

    damit lösche ich dann die datei mittel FTP

    ich hoffe ich hab alles

    vorerst viele dank

  4. #4
    Mouse Organist Avatar von Xanti
    Registriert seit
    05.09.2004
    Beiträge
    1.855
    Ok, mit perl wäre es eleganter und effizienter, da da nicht für jede Variable das File komplett geparst werden muss. Bei 4 Zeilen fällt das aber nicht ins Gewicht.

    Code:
    #!/bin/bash                                                                                              
    
    if [ $(sed -n '1p' "$file") = "1" ]; then
        KEY=${file%\.fax}
        FAXDAT=$(stat -c "%z" "$file" | sed 's/^\(\w*\)-\(\w*\)-\(\w*\).*/\3.\2.\1/')
        FAXERR=$(sed -n '3p' "$file")
        FAXKUN=$(sed -n '4s/.*Nr \([0-9\-]*\).*/\1/p' "$file")
        FAXMES=$(sed -n '4s/.* \(\w*\)$/\1/p' "$file")
        FAXTEL=$(sed -n '4s/Betreff \(\w*\).*/\1/p' "$file")
        FAXZEI=$(stat -c "%z" "$file" | sed -n 's/.* \(\w*:\w*\):.*/\1/p')
    
        cat << EOF > "$KEY.input"                                                                            
    .DBI 1 FAXREP 1                                                                                          
    .KEY "$KEY"                                                                                              
    .DDI FAXMES 0 1 "$FAXMES"                                                                                
    .DDI FAXTEL 0 1 "$FAXTEL"                                                                                
    .DDI FAXZK2 0 1 "$FAXKUN"                                                                               
    .DDI FAXDAT 0 1 "$FAXDAT"                                                                                
    .DDI FAXZEI 0 1 "$FAXZEI"                                                                                
    .DDI FAXERR 0 1 "$FAXERR"                                                                                
    .DDI FAXSYS 0 1 "TOBIT"                                                                                  
    .DDI FAXKUN 0 1 &ZK2 $FAXKUN KBEZ                                                                        
    .DDI LTIME 0 1 @¹h:²m                                                                                    
    EOF                                                                                                      
    
        cat << EOF > "$KEY.ftp"                                                                              
    **********************                                                                                   
                                                                                                             
    user anonymous                                                                                           
                                                                                                             
    delete $KEY.\$\$\$                                                                                       
    quit                                                                                                     
    ********************************                                                                         
    EOF                                                                                                      
    fi
    Die Variable, die den Filenamen enthält, heisst $file. Ausgabe ist in zwei Dateien $KEY.input und $KEY.ftp.

    Gruss, Xanti
    Geändert von Xanti (14.12.2006 um 16:25 Uhr)

    <@Agnar> heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int

  5. #5
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65
    hupsss

    das ging aber fix

    ich probier es mal aus!

    ähmmm

    wo nimmst du die zeit nur her ?

    du solltest dich bei unsere firma bewerben!

  6. #6
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65
    also nochmal

    du machst das einfach prima

    ich arbeite mitlerweile seit 16 jahren in der it
    programiere immer wieder unter fortan und kenn sogar noch richtig betriebsysteme wie VMS

    aber ich finde ganz toll wie du das alles so aus deinem gehirn kramst

    ich versuche immer wieder die befehel zu analysieren

    aber es ist recht schwirig

    unter vms heißen diese skripte prozeduren und das kann ich gut

    aber unix erstaunt mich immer wieder

  7. #7
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65
    hmmmm

    hackt noch

    auf der shell kommt folgene meldung!
    qco/david_log3 29: <<EOF unclosed

    ich hab auch den eindruck das er nicht in der if schleif reinkommt

    ich hab hinter der esten variable eine echo gemacht und das zeigt er nicht

    #!/bin/bash
    export file='c:/qls/qls/kln/qsp/fax/log/1_111111.fax'

    echo $file

    if [ $(sed -n '1p' "$file") = "1" ]; then
    KEY=${file%\.fax}
    echo $key


    was ist eigentlich mit der startsequenz : #!/bin/bash

    muß die sein?

    bei mir fängt das immer so an !:


    #!/bin/sh


    cd c:/qls/qls/kln
    . ./kshrc # hole QLS-Environment

  8. #8
    Mouse Organist Avatar von Xanti
    Registriert seit
    05.09.2004
    Beiträge
    1.855
    Erstmal muss ich sagen, dass Deine Problemstellung nicht wirklich kompliziert ist und eher eine Fleissaufgabe darstellt, die in einer viertel bis halben Stunde gelöst werden kann.

    Code:
    if [ $(sed -n '1p' "$file") = "1" ]; then
    KEY=${file%\.fax}
    echo $key
    Unix ist case-sensitiv. Die Variable key ist eine andere als KEY, also muss da "echo $KEY" stehen.

    Da Du, wie ich irgendwo gelesen habe, eine Unix-like-Umgebung hast, kann es auch gut sein, dass einige Bash-Sachen nicht funktionieren. Probier mal statt

    Code:
    cat << EOF > output
    zeile 1
    zeile 2
    ...
    EOF
    Code:
    (echo zeile 1
    echo zeile 2
    ) > output
    #!/bin/bash ist die Shebang und legt den Interpreter für das Skript fest. Bei mir ist /bin/sh ein Link auf /bin/bash und damit ist #!/bin/bash gleichwertig mit #!/bin/sh. In einem normalen Mehr-Shell-Unixsystem bekommt man aber Schwierigkeiten damit, wenn man die Shell nicht explizit angibt.

    btw, Du hast eine PM.

    <@Agnar> heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int

  9. #9
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65
    ich bin was weiter!

    es lag an vielen leerzeichen die ich beim kopieren mit genommen habe

    er schreib jetzt eine datei

    nur beide in eine

    ich such noch was

  10. #10
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65
    so jetzt sieht es fast prima aus

    in den vars FAXTEL und FAXMES ist nix drin !

    warum auch immer

    der "stat"befhle meckert er an! auch hier alles leer

    in der ausgabe in der datei brauche ich nur den dateinamen ohne Pfad


    hier wäre die doku für den befhel "stat" (für die wissenden)
    Geändert von muemmi (14.12.2006 um 13:31 Uhr)

  11. #11
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65
    hmmmm

    merkwürdig

    wenn ich den befehl "stat -c datei" ausführe sagt er stat not found

    laut doku müßtes es ihn ja geben

    könnte man mit ls nicht die info bekommen und dann den string auslesen?

  12. #12
    Mouse Organist Avatar von Xanti
    Registriert seit
    05.09.2004
    Beiträge
    1.855
    FAXTEL und FAXMES: scheint ein Problem mit dem nicht erkannten blank zu sein. Ich ging davon aus, dass der Trenner ein Leerzeichen ist. Ersetz mal die beiden Zeilen

    Code:
        FAXMES=$(sed -n '4s/.* \(\w*\)$/\1/p' "$file")
        FAXTEL=$(sed -n '4s/Betreff \(\w*\).*/\1/p' "$file")
    durch

    Code:
        FAXKUN=$(sed -n '4s/.*Nr[[:blank:]]\([0-9\-]*\).*/\1/p' $file)
        FAXMES=$(sed -n '4s/.*[[:blank:]]\(\w*\)$/\1/p' $file)
    Damit werden sowohl Leerzeichen als auch Tabs erschlagen.

    Bezüglich der stats: Man kann die Daten auch über ls -l ermitteln, vielleicht geht das einfacher:

    Code:
       FAXDAT=$(ls -l $file | cut -d" " -f 7 | sed 's/^\(\w*\)-\(\w*\)-\(\w*\)/\3.\2.\1/')
       FAXZEI=$(ls -l $file | cut -d" " -f 8)

    <@Agnar> heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int

  13. #13
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65
    danke schön

    ich probier das am montag aus und melde mich

    liebe grüße

    frank

  14. #14
    Eroberer
    Registriert seit
    14.12.2005
    Beiträge
    65
    hmmmm

    also der erste punkt verwirrt mich

    ich soll faxmes und tel

    gegen kun und mess ersetzten ?

    und das zweite klappt auch nicht zei und dat

    ls -l gibt folgenes aus


    -rwxrwxrwx 1 VORDEFINIERT\Administrators None 58 Dec 13 15:10
    1_111111.fax
    -rwxrwtrwa 1 VORDEFINIERT\Administrators None 74 Dec 19 09:24
    1_111111.ftp
    -rwxrwtrwa 1 VORDEFINIERT\Administrators None 274 Dec 19 09:24
    1_111111.input

    liebe grüße

    frank
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    hier noch mal das ganze programm

    #!/bin/sh
    export file='c:/qls/qls/kln/qsp/fax/log/1_111111.fax'

    echo $file

    if [ $(sed -n '1p' "$file") = "1" ]; then
    KEY=${file%\.fax}
    echo $KEY
    FAXERR=$(sed -n '3p' "$file")
    echo Error $FAXERR

    FAXTEL=$(sed -n '4s/Betreff \(\w*\).*/\1/p' "$file")
    echo Tel: $FAXTEL

    FAXKUN=$(sed -n '4s/.*Nr[[:blank]\([0-9\-]*\).*/\1/p' $file)
    echo Nr: $FAXKUN

    FAXMES=$(sed -n '4s/.*[[:blank]\(\w*\)$/\1/p' $file)
    echo Meld: $FAXMES

    FAXDAT=$(ls -l $file | cut -d" " -f 7 | sed 's/^\(\w*\)-\(\w*\)-\(\w*\)/\3.\2.\1/')
    echo dat: $FAXDAT

    FAXZEI=$(ls -l $file | cut -d" " -f
    echo Zeit: $FAXZEI

    ls -l $file



    cat << EOF > "$KEY.input"
    .DBI 1 FAXREP 1
    .KEY "$KEY"
    .DDI FAXMES 0 1 "$FAXMES"
    .DDI FAXTEL 0 1 "$FAXTEL"
    .DDI FAXZK2 0 1 "$FAXKUN"
    .DDI FAXDAT 0 1 "$FAXDAT"
    .DDI FAXZEI 0 1 "$FAXZEI"
    .DDI FAXERR 0 1 "$FAXERR"
    .DDI FAXSYS 0 1 "TOBIT"
    .DDI FAXKUN 0 1 &ZK2 $FAXKUN KBEZ
    .DDI LTIME 0 1 @¹h:²m
    EOF

    cat << EOF > "$KEY.ftp"
    user anonymous

    delete $KEY.\$\$\$

    quit
    EOF

    fi


    und die datei: ($file)
    ----------------------------------------------
    1
    0
    7
    Betreff 003235685293 Nr 06-03052 , sent
    ----------------------------------------------

    die nummer und den error findet er
    Geändert von muemmi (19.12.2006 um 09:45 Uhr) Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!

  15. #15
    Foren Gott
    Registriert seit
    24.04.2005
    Ort
    Erfurt
    Beiträge
    3.978
    Hallo
    Es handelt sich hier nicht um eine Unix-shell!
    Cygwin oder was auch immer du verwendest, ist nicht kompatibel zu einer bash oder ksh!
    Folglich ist das hier eigentlich OT!
    Ich möcht aber dennoch einen Tipp geben, obwohl ich eigentlich auf Windows nicht reagiere:
    Das ls -l findet das Datum nur dann zuverlässig, wenn im Pfad oder Dateiname kein Leerzeichen vorkommt!

    Du kannst aber versuchen mit sed das von Hinten aufzufädeln:
    Wenn die Ausgabe deines ls -l so ausschaut:

    Code:
    -rwxrwxrwx 1 VORDEFINIERT\Administrators None 58 Dec 13 15:10 1_111111.fax
    -rwxrwtrwa 1 VORDEFINIERT\Administrators None 74 Dec 19 09:24 1_111111.ftp
    -rwxrwtrwa 1 VORDEFINIERT\Administrators None 274 Dec 19 09:24 1_111111.input
    Dann liefert:
    Code:
    ls -l |sed -e 's|^.*[[:blank:]]\(\w\+[[:blank:]]\+[[:digit:]]\+\)[[:blank:]]\([[:digit:]]\+:\+[[:digit:]]\+\)[[:blank:]]\([^:]\+\)$|\1|g'
    Dec 13
    Dec 19
    Dec 19
    #sprich das Datum
    ls -l |sed -e 's|^.*[[:blank:]]\(\w\+[[:blank:]]\+[[:digit:]]\+\)[[:blank:]]\([[:digit:]]\+:\+[[:digit:]]\+\)[[:blank:]]\([^:]\+\)$|\2|g'
    15:10
    09:24
    09:24
    # die Uhrzeit.
    Das jetzt in deiner Variable verheizt, und du solltest das bekommen was du willst.

    Gruß Wolfgang
    Ich bin pure Nostalgie

Ähnliche Themen

  1. Verzeichnisse in eine Datei schreiben aber mit Ausschluß
    Von knausser im Forum Shell-Skripte
    Antworten: 1
    Letzter Beitrag: 01.06.2006, 18:00
  2. Antworten: 3
    Letzter Beitrag: 02.02.2006, 20:20
  3. Antworten: 7
    Letzter Beitrag: 19.01.2006, 14:46
  4. Zeilen auslesen und in eine neue Datei schreiben
    Von angelika im Forum Shell-Skripte
    Antworten: 9
    Letzter Beitrag: 03.08.2005, 13:59
  5. Perl wert aus einer datei auslesen
    Von SilverICE im Forum Ruby, php, Perl, Python ...
    Antworten: 10
    Letzter Beitrag: 11.02.2004, 15:37

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •