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

Per Batchdatei Datei in Datei kopieren

Frage Entwicklung Batch & Shell

Mitglied: Rico55

Rico55 (Level 1) - Jetzt verbinden

11.07.2013 um 16:35 Uhr, 2221 Aufrufe, 12 Kommentare, 3 Danke

Hallo

ich habe eine Textdatei in der sehr große Zeilen drinstehen ( eine Zeile hat 40 Kilobyte)

Diese Datei, nennen wir sie abc.txt die aktuell 1 Zeile beherbergt,
möchte ich exponentiell vergrößern und die logik in der batchfile ablegen.

Ein Beispiel:

In Datei abc.txt steht

a, b , c


Ich hätte gerne dass das Batchskript die Datei abc.txt einließt und wieder in abc.txt reinschreibt.
Dann habe ich beim ersten Durchlauf 2 zeilen, dann 4 ,dann 8 usw...bis 1 millionen

Kann mir da jemand helfen?

Gruß
Mike
Mitglied: MrNetman
11.07.2013 um 18:22 Uhr
Und wann platzt deine Datei?
Eine Million Zeilen mit jeweils 40.000 Zeichen. (4E4 x 1E6 = 4E10)
das ergibt mindestens 40 Gigabyte

Gruß
Netman
Bitte warten ..
Mitglied: Endoro
11.07.2013 um 18:25 Uhr
Hallo Mike,

leider kann batch nur mit Zeichenketten bis 8191 Zeichen umgehen.

lg
Bitte warten ..
Mitglied: Xolger
11.07.2013, aktualisiert 12.07.2013
Hallo Mike,

nicht schön aber funktioniert:
01.
copy 1.txt 2.txt 
02.
copy 1.txt + 2.txt 
03.
del 2.txt
Für Schleifen gibs hier ja genug Beispiele und Experten.
Und bestimmt gibt es auch ne elegante Lösung.


Gruß
Xolger
Bitte warten ..
Mitglied: rubberman
11.07.2013, aktualisiert um 23:45 Uhr
Hallo Mike,

Was ist der tiefere Sinn der Aktion?
Wenn es nur darum gehen sollte eine Datei mit einer bestimmten Größe zu erzeugen, dann hilft dir FSUTIL (benötigt aber Adminrechte).
fsutil file createnew "%userprofile%\desktop\abc.txt" 1000
... erzeugt eine Datei mit 1000 Nullzeichen (=1000 Byte Größe) auf deinem Desktop.

Grüße
rubberman
Bitte warten ..
Mitglied: Rico55
12.07.2013 um 13:43 Uhr
Hallo,

tieferer Sinn ist wirklich das was ich geschrieben habe...

ich habe eine CSV Datei mit einer Zeile und die hat extrem vielen Spalten (>1000)
Nun möchte ich die Datei nicht irgendwo lagern müssen, weil wie schon richtig bemerkt, sind das 40 GB Platzverschwendung.
Ich möchte das mir ein Skript die Datei on the fly zusammenbaut.

Im SQL würde ich nun einfach ein INSERT INTO table SELECT * from Table machen ... das mache ich 20 mal, dann habe ich 1 Millionen
Datensätze mit 1000 Spalten.
Genau das möchte ich per Batch nun mit der CSV Datei machen - ich möchte eine batchfile mit einer Zeile und 1000 Spalten irgendwo ablegen und nach Bedarf soll er per klick 1000000 Datensätze draus machen (damit unser Azubi das auch kann)

Eine neue Anforderung ist zusätzlich, dass der erste Wert pro Zeile nach oben inkrementieren soll, damit ich eine identifizierende ID habe.

Gruß Mike

PS:
Diejenigen die nun sagen "das geht mit batch nicht" ... mir ist es grundsätzlich egal, wenn das mit VB oder Powershell geht, bin ich ganz ohr.
Bitte warten ..
Mitglied: Endoro
12.07.2013, aktualisiert um 14:40 Uhr
Hallo Mike,

Zitat von Rico55:
ich möchte eine batchfile mit einer Zeile und 1000 Spalten
irgendwo ablegen und nach Bedarf soll er per klick 1000000 Datensätze draus machen

Meine Batchdateien sind einspaltig und enthalten Programmcode

Wie sollen aus einer Zeile mit 1000 Spalten 1 Mio Datensätze werden?
Hab ich irgendwas verpasst

lg
Bitte warten ..
Mitglied: rubberman
12.07.2013 um 14:46 Uhr
Hallo Mike.

Quick'n'dirty als VBScript:
01.
Option Explicit 
02.
 
03.
Const sFilePath = "abc.csv" 
04.
Const iDataSets = 1000 
05.
 
06.
Const ForWriting = 2 
07.
 
08.
Dim oFSO, oFile, aFirstLine, sLine, i, iID 
09.
 
10.
Set oFSO = CreateObject("Scripting.FileSystemObject") 
11.
aFirstLine = Split(oFSO.OpenTextFile(sFilePath).ReadLine, ",") 
12.
iID = CInt(Trim(aFirstLine(0))) 
13.
sLine = "" 
14.
For i = 1 To UBound(aFirstLine) 
15.
  sLine = sLine & "," & aFirstLine(i) 
16.
Next 
17.
Set oFile = oFSO.OpenTextFile(sFilePath, ForWriting) 
18.
For i = 1 To iDataSets 
19.
  oFile.WriteLine CStr(iID) & sLine 
20.
  iID = iID + 1 
21.
Next 
22.
oFile.Close
Die erste Zeile in meiner "abc.csv" sah so aus:
0,a,b,c
Grüße
rubberman
Bitte warten ..
Mitglied: Endoro
12.07.2013, aktualisiert um 16:53 Uhr
Ich hab es mal mit awk getestet:
C:\TEST>awk -F, -v OFS=, "{for (i=1;i<=10^6;i++) print(i,$0)}" file.csv>test.csv 
 
C:\TEST>dir *.csv 
12.07.2013  15:40            41.003 file.csv 
12.07.2013  16:08    41.009.929.900 test.csv
.. und mit einer Mischung aus sed und batch:
C:\TEST>(for /l %a in (1,1,1000000) do @echo(%a)>numbers.csv 
 
C:\TEST>sed "s#.*#s/.*/\&,&/#" file.csv|sed -f - numbers.csv>test.csv 
 
C:\TEST>dir *.csv 
12.07.2013  16:20            41.003 file.csv 
12.07.2013  16:20         7.888.896 numbers.csv 
12.07.2013  16:48    41.009.888.896 test.csv
awk war 5 Minuten schneller, kaum zu glauben.

lg
Bitte warten ..
Mitglied: Rico55
15.07.2013 um 13:38 Uhr
Hallo rubberman,

erst mal vielen Dank für deine Mühe - das funktioniert tadellos.

Ich muss das selbe noch für eine Fixed Length CSV machen.
Kannst Du mir da vielleicht noch mal ein Beispiel dazu geben bitte?

Grüße
Mike
Bitte warten ..
Mitglied: rubberman
15.07.2013 um 18:22 Uhr
Hallo Mike,

ich denke schon. Aber kannst du mir "Fixed Length" mal erklären? Was hat denn eine gleichbleibende Länge? Sehe von hier aus leider nicht deinen Bildschirm.

Grüße
rubberman
Bitte warten ..
Mitglied: Rico55
23.07.2013, aktualisiert um 15:19 Uhr
Moin,

sorry ich warleider zwischendurch erkrankt.

Fixed Length bedeutet das die "Spalten" in der CSV Datei, den Wert des größten dargestellt wertes annehmen.
Heisst wenn du 10 Zeilen hast und eine Spalte A stehen möglicherweise in den ersten neun Zeilen nur 2-3 Buchstaben drin
und im zehnten Datensatz steht eine 1000 BYTE große Zeichenkette => dann ist Spalte A immer 1000 BYTE groß.
DIe ersten 9 Zeilen werden mit Leerzeichen aufgefüllt um auf die 1000 Byte zu kommen.
(http://www.webopedia.com/TERM/F/fixed_length.html
http://wiki.answers.com/Q/What_is_difference_between_fixed_length_recor ...)

Kannst Du mir damit bitte noch helfen?
Irgendwie klappt das bei mir nicht.

Gruß Mike

PS:
ich komme auch schon recht weit

Ich schaffe es aber leider nicht folgende Anforderungen umzusetzen

1) Meine Zeile hat 1000 "Spalten". DIe will ich ungerne von Hand da eingeben.
Die "Spalten" sind nun getrennt durch einen Tab.

2) Ich will nicht alle Spalten auf die selbe fixed length setzen sondern nur z.B. die Spalte
777 auf 100 BYTE.
Bitte warten ..
Mitglied: rubberman
24.07.2013 um 21:27 Uhr
Hallo Mike,

ich weiß nicht ob dir bewusst ist, dass du Äpfel mit Birnen vergleichst.

Eine Datenbank ist ein binäres Gebilde. Dort kannst du den Speicherplatz für verschiedene Datenfelder vordefinieren. Was dann die Datenbanksoftware tut ist abhängig von der Implementation.
Beispielsweise könnte der Speicherbereich die Daten enthalten, die restlichen Bytes sind ausgenullt (mit HEX 0x00 beschrieben).
Oder ein fixer Datenbereich enthält den Wert, der Rest ist zufälliger Datenmüll. Start und Länge des eigentlichen Wertes sind adressiert.

Du möchtest aber nun mit einer CSV Datei arbeiten. CSV ist aber Plaintext, dort funktioniert das nicht! Das einzige, was du tun kannst ist Leerzeichen voran- oder nachzustellen. Stellt sich mir die Frage, welches Benefit du damit erreichst? Leerzeichen sind Zeichen, die dann zum Wert gehörig interpretiert werden und nicht etwa als "Nichts".

Was also ist das Ziel der Aktion??? Was versprichst du dir davon?

Grüße
rubberman
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

C und C++
gelöst In einer Windows Form Anwendung per Button eine Datei kopieren (4)

Frage von Knuefi zum Thema C und C ...

Batch & Shell
gelöst Powershell Datei kopieren mit ACL Script funktioniert nicht (4)

Frage von xpxy15 zum Thema Batch & Shell ...

Batch & Shell
Batch: Word Datei kopieren und umbennen (9)

Frage von ExcelNoob177 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...